﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DECOR.BL.BE;
using DECOR.BL.BC;
using System.Collections.Specialized;
using System.Web.Script.Serialization;
using System.Collections.Generic;
using System.Reflection;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace DECOR.Touchapp
{
    public partial class documentoVentas : System.Web.UI.Page
    {
        //*****************************************************************************
        //estos codigo en duro se encontraron en DocVenta.aspx.cs de la web, revisarlo, por ahora los estamos tomando.
        public string gvSectorVal = "00";
        public string gvGrpVendVal = "100";
        //*****************************************************************************
        PedidoBE objPedido = null;
        ClienteBE objCliente = null;
        string Json = "";
        //**********************************************************************************************
        //Variables comunes entre los diferentes metodos
        string pNumPedido = "";
        string pTipoDoc = "";
        string pCanalDist = "";
        string pOrgVtas = "";
        //**********************************************************************************************
        //Variables para la búsqueda de documento
        string pObjetoPersona = ""; //esta variable tiene que ser enviada desde sencha.
        string pFechaInicio = "";
        string pCodigoMaterial = "";
        string pFechaFin = "";
        string pAuxCod = ""; //es el código de Asesor
        string pnumDoc = "";
        string prefLegal = "";
        string pnombreCliente = "";
        string pNIF = "";
        string pcodCliente = "";
        string pnombreMaterial = "";
        string pDatoBusqueda = "";
        string pTipoDato = "";

        private List<PedidoBE> _lstPedidos;

        string _bloqueo = "";
        string _credito = "";
        string _entrega = "";
        string _global = "";
        string _rechazo = "";
        //**********************************************************************************************
        string pRetval = "";
        string pCondicionesPago = ""; //LISTA DE CONDICIONES DE PAGO ENVIADO DESDE EL DISPOSIVITO TOUCH        
        string pCorreo = "";
        /* esta lista sera enviada desde sencha(string) y la usaremos para asignarle la condicion de pago
         * esta en el metodo cargarInfoCliente */
        string pLstCondicionesPago = "";
        List<GenericBE> lstCondicionesPago = new List<GenericBE>();

        //************************************************************++++
        //campos para de la pantalla del cliente
        string txtNumPedido = "false";
        //campos para el metodo bloqueocliente, aca sencha los recupera para darle un valor o establecer una propiedad
        string txtCodigoCliente = "";
        string txtNombreCliente = "";
        string txtCodigoSolicitante = "";
        string txtNombreSolicitante = "";
        string txtDireccionSolicitante = "";
        string ddlCodigoSolicitante = "";
        string txtTelefonoSolicitante = "";
        string txtNifSolicitante = "";
        //************************************************************++++
        //campos para manejo de los botones
        string btnGrabar = "";

        //**********************************************************************************************
        //variables a enviar al cliente(ipad)
        string popUpGenerarServicio = "false";
        string FechaValidez = "";

        string CodVendedor1 = "";
        string NomVendedor1 = "";

        string oficina = "";
        string grpVendVal = "";

        string txtFechaFact = "";

        string lnkShowPopUpServicios = "";
        string pnlServicios = "";

        string lnkShowPopUpTextos = "";
        string pnlTextos = "";

        string tpDescVisita = "";
        string tpDescInstala = "";
        string tpResultadoVisita = "";
        string lnkShowPopUpTextosVisita = "";
        string cmbTipoVisita = "";
        string cbxReembolsable = "";
        //**********************************************************************************************
        //pertenecen a variables de cargarpedido
        string pedidoTratado = "";
        string clienteBloqueado = "";
        string showPopPupServicios = "";
        string panelServicios = "";
        string showPopPupTextos = "";
        string panelTextos = "";
        string esNCND = "false";

        string correo = "";
        string codigoSolicitante = "";
        string codigoDestMerc = "";
        string codigoDestFact = "";
        string codigoResPago = "";
        string nombreSolicitante = "";
        string direccionSolicitante = "";
        string codigoPostalSolicitante = "";
        string telefonoSolicitante = "";
        string nifSolicitante = "";

        string nombreDestMerc = "";
        string direccionDestMerc = "";
        string codigoPostalDestMerc = "";
        string telefonoDestMerc = "";
        string nombreDestFact = "";
        string direccionDestFact = "";
        string codigoPostalDestFact = "";
        string telefonoDestFact = "";

        string nombreResPago = "";
        string direccionResPago = "";
        string codigoPostalResPago = "";
        string telefonoResPago = "";
        string nifResPago = "";

        string codigoCliente = "";
        string nombreCliente = "";
        string direccionCliente = "";

        List<GenericBE> lstOrgVtas = new List<GenericBE>();
        List<GenericBE> lstCanalDist = new List<GenericBE>();
        string CondExp = "";
        List<InstalaBE> lstInst = null;

        string DescuentoTotal = "";
        string TextosVisita = "";

        string OrgVtas = "";
        string CanalDist = "";
        string btnPlanFact = "";
        string BloqueoEntrega = "";
        string Moneda = "";
        string CondicionesPago = "";
        string BloqueoFactura = "";
        string GrupoCond = "";
        string Motivo = "";
        string TipoVisita = "";
        string ShowPedidosAsociados = "";
        string ShowPopPupTextosVisitas = "";
        string PedidoVenta12 = "";
        string PedidoVenta22 = "";
        string PedidoVenta32 = "";
        string PedidoVenta42 = "";
        string PedidoVisita12 = "";
        string PedidoVisita22 = "";
        string PedidoVisita32 = "";
        string PedidoVisita42 = "";
        string OrdenCompra = "";
        string TipoCambio = "";
        string Fecha = "";
        string FechaEntrega = "";
        string FechaFact = "";
        string NomProyecto = "";
        string Npisos = "";
        string chkAscensor = "";
        string PesoTotal = "";
        string SimbTotal = "";
        string SimbSubTotal = "";
        string MensajeTC = "";
        string SubTotal = "";
        string IGV = "";
        string Total = "";
        string TextoAtencion = "";
        string TextoTransporte = "";
        string TextoTiempoEntrega = "";
        string TextoObsAdministrativas = "";
        string TextoRefFactura = "";
        string TextoRefDireccion = "";
        string TextoContactoVisita = "";
        string TextDatosAdicClienteVisita = "";
        string TextoResultadoVisita = "";
        string TextTelefonosVisita = "";
        string TextDescVisita = "";
        string TextDescInstala = "";

        string codigoAgTrans = "";
        string nombreAgTrans = "";
        string direccionAgTrans = "";
        string codigoPostalAgTrans = "";
        string telefonoAgTrans = "";
        string nifAgTrans = "";
        string CodVendedorWeb = "";
        string NomVendedorWeb = "";
        string Vendedor2 = "";
        string Vendedor3 = "";
        string CodProfesional = "";
        string NomProfesional = "";
        string direccionProfesional = "";
        string codigoPostalProfesional = "";
        string telefonoProfesional = "";
        string CodProfesional2 = "";
        string NomProfesional2 = "";
        string direccionProfesional2 = "";
        string codigoPostalProfesional2 = "";
        string telefonoProfesional2 = "";
        /* cuando se carga un pedido se necesita este valor para asignarle a la condicion de pago, en
         * caso que no lo encuentre se enviará el codigo 0 */
        string CondicionesPagoIndex = "";
        string op = "";
        private List<GenericBE> _lvLstCentros = new List<GenericBE>();
        private List<GenericBE> _lvLstAlmacenes = new List<GenericBE>();
        private List<GenericBE> _lvLstLotes = new List<GenericBE>();
        private List<StockBE> _lvLstCAL = new List<StockBE>();
        private List<GenericBE> _lvLstPrioridadEnt = new List<GenericBE>();
        private string _lvCALSessKey = string.Empty;
        private readonly string _lvPreCALSessKey = "LstCAL";
        string codTipoDocAnterior = string.Empty;
        string codTipoDocNuevo = string.Empty;
        string mensajeExcepcion = string.Empty;

        protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "application/json; charset=UTF-8";
            //segun lo que se desea hacer capturamos el valor de la accion a realizar enviado desde sencha
            op = Request.Params["accion"];
            pNumPedido = Request.Params["pNumPedido"];
            //cargamos las variables generales
            pTipoDoc = Request.Params["tipoDocumento"];
            pCondicionesPago = Request.Params["condicionesPago"];
            pCanalDist = Request.Params["canalDist"];
            pCorreo = Request.Params["correo"];
            pOrgVtas = Request.Params["OrgVtas"];
            pLstCondicionesPago = Request.Params["lstCondicionesPago"];
            

            if (Request.HttpMethod.Equals("POST"))
            {
                //--cargar info de usuario a CredencialesController
                CredencialesController.cargarInfo(Request.Params); //(SIEMPRE)
                string pInstal = Request.Params["instalacion"] != null ? Request.Params["instalacion"] : "";
                if (pInstal != "")
                {
                    pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"result\": \"{2}\", ";
                    pRetval += " \"numPedido\": \"{3}\" ";
                    pRetval += "}";
                    
                    string _pNumPed = "";
                    string _mens = GenerarServicio(out _pNumPed);
                    if (_pNumPed != "")
	                {
                        pRetval = pRetval.Replace("{0}", "true");
                        pRetval = pRetval.Replace("{1}", "");
                        pRetval = pRetval.Replace("{2}", _mens);
                        pRetval = pRetval.Replace("{3}", _pNumPed);
	                }
                    else
	                {
                        pRetval = pRetval.Replace("{0}", "false");
                        pRetval = pRetval.Replace("{1}", "");
                        pRetval = pRetval.Replace("{2}", _mens);
                        pRetval = pRetval.Replace("{3}", "");
	                }
                }
                else
                {
                    if (op != "buscarDoc")
                    {
                        pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"op\": \"{2}\", ";
                        pRetval += "\"pedidoTratado\": \"{16}\", \"objCliente\": {17}, \"correo\": \"{18}\", ";
                        pRetval += "\"codigoSolicitante\": \"{24}\", \"codigoDestFact\": \"{25}\", \"codigoResPago\": \"{26}\", ";
                        pRetval += "\"nombreSolicitante\": \"{28}\", \"direccionSolicitante\": \"{29}\", \"codigoPostalSolicitante\": \"{30}\", ";
                        pRetval += "\"telefonoSolicitante\": \"{31}\", \"nifSolicitante\": \"{32}\", \"codigoDestMerc\": \"{33}\", \"nombreDestMerc\": \"{34}\", ";
                        pRetval += "\"direccionDestMerc\": \"{35}\", \"codigoPostalDestMerc\": \"{36}\", \"telefonoDestMerc\": \"{37}\", \"nombreDestFact\": \"{38}\", ";
                        pRetval += "\"direccionDestFact\": \"{39}\", \"codigoPostalDestFact\": \"{40}\", \"telefonoDestFact\": \"{41}\", \"nombreResPago\": \"{42}\", ";
                        pRetval += "\"direccionResPago\": \"{43}\", \"codigoPostalResPago\": \"{44}\", \"telefonoResPago\": \"{45}\", \"nifResPago\": \"{46}\", ";
                        pRetval += "\"codigoCliente\": \"{47}\", \"nombreCliente\": \"{48}\", \"direccionCliente\": \"{49}\", \"lstBloFac\": {50}, ";
                        pRetval += "\"lstInst\": {51}, \"oficina\": \"{52}\", \"grpVendVal\": \"{53}\", ";
                        pRetval += "\"esNCND\": \"{56}\", \"FechaValidez\": \"{57}\", \"objPedido\": {58}, ";
                        pRetval += "\"lstOrgVtas\": {59}, \"lstCanalDist\": {60}, \"CondExp\": \"{61}\", \"pCondicionesPago\": \"{62}\", ";
                        pRetval += "\"OrgVtas\": \"{63}\", \"CanalDist\": \"{64}\", \"BloqueoEntrega\": \"{65}\", \"Moneda\": \"{66}\", ";
                        pRetval += "\"BloqueoFactura\": \"{67}\", \"GrupoCond\": \"{68}\", \"Motivo\": \"{69}\", \"TextosVisita\": \"{70}\", ";
                        pRetval += "\"TipoVisita\": \"{71}\", \"cbxReembolsable\": \"{72}\", \"OrdenCompra\": \"{73}\", \"TipoCambio\": \"{74}\", ";
                        pRetval += "\"Fecha\": \"{75}\", \"FechaValidez\": \"{76}\", \"FechaEntrega\": \"{77}\", \"FechaFact\": \"{78}\", ";
                        pRetval += "\"NomProyecto\": \"{79}\", \"Npisos\": \"{80}\", \"chkAscensor\": \"{81}\", \"PesoTotal\": \"{82}\", ";
                        pRetval += "\"SimbTotal\": \"{83}\", \"MensajeTC\": \"{84}\", \"SubTotal\": \"{85}\", \"IGV\": \"{86}\", ";
                        pRetval += "\"Total\": \"{87}\", \"PedidoVenta12\": \"{88}\", \"PedidoVenta22\": \"{89}\", \"PedidoVenta32\": \"{90}\", ";
                        pRetval += "\"PedidoVenta42\": \"{91}\", \"PedidoVisita12\": \"{92}\", \"PedidoVisita22\": \"{93}\", \"PedidoVisita32\": \"{94}\", ";
                        pRetval += "\"PedidoVisita42\": \"{95}\", \"codigoAgTrans\": \"{96}\", \"nombreAgTrans\": \"{97}\", \"direccionAgTrans\": \"{98}\", ";
                        pRetval += "\"codigoPostalAgTrans\": \"{99}\", \"telefonoAgTrans\": \"{100}\", \"nifAgTrans\": \"{101}\", \"CodVendedor1\": \"{102}\", ";
                        pRetval += "\"NomVendedor1\": \"{103}\", \"CodVendedorWeb\": \"{104}\", \"NomVendedorWeb\": \"{105}\", \"Vendedor2\": \"{106}\", ";
                        pRetval += "\"Vendedor3\": \"{107}\", \"CodProfesional\": \"{108}\", \"NomProfesional\": \"{109}\", \"direccionProfesional\": \"{110}\", ";
                        pRetval += "\"codigoPostalProfesional\": \"{111}\", \"telefonoProfesional\": \"{112}\", \"CodProfesional2\": \"{113}\", \"NomProfesional2\": \"{114}\", ";
                        pRetval += "\"direccionProfesional2\": \"{115}\", \"codigoPostalProfesional2\": \"{116}\", \"telefonoProfesional2\": \"{117}\", ";
                        pRetval += "\"planFacturacion\": {118}, \"datoReniec\": {119}, \"listCliPregResp\": {120}, ";
                        pRetval += "\"TotalDcto\": \"{121}\" ";  
                        pRetval += "}";

                        CargarPedido(pNumPedido, op);
                        #region replacevacio
                        //***********************************************************************************
                        //limpiamos las llaves de pRetVal
                        pRetval = pRetval.Replace("{3}", "");
                        pRetval = pRetval.Replace("{4}", "");
                        pRetval = pRetval.Replace("{5}", "");
                        pRetval = pRetval.Replace("{6}", "");
                        pRetval = pRetval.Replace("{7}", "");
                        pRetval = pRetval.Replace("{8}", "");
                        pRetval = pRetval.Replace("{9}", "");
                        pRetval = pRetval.Replace("{10}", "");
                        pRetval = pRetval.Replace("{11}", "");
                        pRetval = pRetval.Replace("{12}", "");
                        pRetval = pRetval.Replace("{13}", "");
                        pRetval = pRetval.Replace("{14}", "");
                        pRetval = pRetval.Replace("{15}", "");
                        pRetval = pRetval.Replace("{16}", "");
                        pRetval = pRetval.Replace("{17}", "null");
                        pRetval = pRetval.Replace("{18}", "");
                        pRetval = pRetval.Replace("{19}", "");
                        pRetval = pRetval.Replace("{20}", "");
                        pRetval = pRetval.Replace("{21}", "");
                        pRetval = pRetval.Replace("{22}", "");
                        pRetval = pRetval.Replace("{23}", "");
                        pRetval = pRetval.Replace("{24}", "");
                        pRetval = pRetval.Replace("{25}", "");
                        pRetval = pRetval.Replace("{26}", "");
                        pRetval = pRetval.Replace("{27}", "");
                        pRetval = pRetval.Replace("{28}", "");
                        pRetval = pRetval.Replace("{29}", "");
                        pRetval = pRetval.Replace("{30}", "");
                        pRetval = pRetval.Replace("{31}", "");
                        pRetval = pRetval.Replace("{32}", "");
                        pRetval = pRetval.Replace("{33}", "");
                        pRetval = pRetval.Replace("{34}", "");
                        pRetval = pRetval.Replace("{35}", "");
                        pRetval = pRetval.Replace("{36}", "");
                        pRetval = pRetval.Replace("{37}", "");
                        pRetval = pRetval.Replace("{38}", "");
                        pRetval = pRetval.Replace("{39}", "");
                        pRetval = pRetval.Replace("{40}", "");
                        pRetval = pRetval.Replace("{41}", "");
                        pRetval = pRetval.Replace("{42}", "");
                        pRetval = pRetval.Replace("{43}", "");
                        pRetval = pRetval.Replace("{44}", "");
                        pRetval = pRetval.Replace("{45}", "");
                        pRetval = pRetval.Replace("{46}", "");
                        pRetval = pRetval.Replace("{47}", "");
                        pRetval = pRetval.Replace("{48}", "");
                        pRetval = pRetval.Replace("{49}", "");
                        pRetval = pRetval.Replace("{50}", "null");
                        pRetval = pRetval.Replace("{51}", "null");
                        pRetval = pRetval.Replace("{52}", "");
                        pRetval = pRetval.Replace("{53}", "");
                        pRetval = pRetval.Replace("{54}", "");
                        pRetval = pRetval.Replace("{55}", "");
                        pRetval = pRetval.Replace("{56}", "");
                        pRetval = pRetval.Replace("{57}", "");
                        pRetval = pRetval.Replace("{58}", "null");
                        pRetval = pRetval.Replace("{59}", "null");
                        pRetval = pRetval.Replace("{60}", "null");
                        pRetval = pRetval.Replace("{61}", "");
                        pRetval = pRetval.Replace("{62}", "");
                        pRetval = pRetval.Replace("{63}", "");
                        pRetval = pRetval.Replace("{64}", "");
                        pRetval = pRetval.Replace("{65}", "");
                        pRetval = pRetval.Replace("{66}", "");
                        pRetval = pRetval.Replace("{67}", "");
                        pRetval = pRetval.Replace("{68}", "");
                        pRetval = pRetval.Replace("{69}", "");
                        pRetval = pRetval.Replace("{70}", "");
                        pRetval = pRetval.Replace("{71}", "");
                        pRetval = pRetval.Replace("{72}", "");
                        pRetval = pRetval.Replace("{73}", "");
                        pRetval = pRetval.Replace("{74}", "");
                        pRetval = pRetval.Replace("{75}", "");
                        pRetval = pRetval.Replace("{76}", "");
                        pRetval = pRetval.Replace("{77}", "");
                        pRetval = pRetval.Replace("{78}", "");
                        pRetval = pRetval.Replace("{79}", "");
                        pRetval = pRetval.Replace("{80}", "");
                        pRetval = pRetval.Replace("{81}", "");
                        pRetval = pRetval.Replace("{82}", "");
                        pRetval = pRetval.Replace("{83}", "");
                        pRetval = pRetval.Replace("{84}", "");
                        pRetval = pRetval.Replace("{85}", "");
                        pRetval = pRetval.Replace("{86}", "");
                        pRetval = pRetval.Replace("{87}", "");
                        pRetval = pRetval.Replace("{88}", "");
                        pRetval = pRetval.Replace("{89}", "");
                        pRetval = pRetval.Replace("{90}", "");
                        pRetval = pRetval.Replace("{91}", "");
                        pRetval = pRetval.Replace("{92}", "");
                        pRetval = pRetval.Replace("{93}", "");
                        pRetval = pRetval.Replace("{94}", "");
                        pRetval = pRetval.Replace("{95}", "");
                        pRetval = pRetval.Replace("{96}", "");
                        pRetval = pRetval.Replace("{97}", "");
                        pRetval = pRetval.Replace("{98}", "");
                        pRetval = pRetval.Replace("{99}", "");
                        pRetval = pRetval.Replace("{100}", "");
                        pRetval = pRetval.Replace("{101}", "");
                        pRetval = pRetval.Replace("{102}", "");
                        pRetval = pRetval.Replace("{103}", "");
                        pRetval = pRetval.Replace("{104}", "");
                        pRetval = pRetval.Replace("{105}", "");
                        pRetval = pRetval.Replace("{106}", "");
                        pRetval = pRetval.Replace("{107}", "");
                        pRetval = pRetval.Replace("{108}", "");
                        pRetval = pRetval.Replace("{109}", "");
                        pRetval = pRetval.Replace("{110}", "");
                        pRetval = pRetval.Replace("{111}", "");
                        pRetval = pRetval.Replace("{112}", "");
                        pRetval = pRetval.Replace("{113}", "");
                        pRetval = pRetval.Replace("{114}", "");
                        pRetval = pRetval.Replace("{115}", "");
                        pRetval = pRetval.Replace("{116}", "");
                        pRetval = pRetval.Replace("{117}", "");
                        //pRetval = pRetval.Replace("{118}", "null");
                        pRetval = pRetval.Replace("{119}", "[]");
                        pRetval = pRetval.Replace("{120}", "[]");
                        pRetval = pRetval.Replace("{121}", "");
                        //***********************************************************************************
                        #endregion                        
                        PlanFacturacion(pNumPedido);
                    }
                    else if (op == "buscarDoc")
                    {
                        BuscarDocumento();
                    }
                }

                
            }
            else //GET
            {
                if (op == "crear")
                {
                    CrearPedido();
                }
                else if (op == "editar")
                {

                }
                else
                {
                    //this.cargaClienteSesion();
                    //this.cargarInterlocutores();
                    //this.cargaCombos();
                    //this.cargarInfoCliente();
                    //this.cargaPedido();
                    //this.manejarBotonera();
                }
            }

            Response.ContentType = "application/json; charset=UTF-8";
            Response.Write(pRetval);
        }

        private void EnviaErrores(string mensaje)
        {
            pRetval = pRetval.Replace("{0}", "false");
            pRetval = pRetval.Replace("{1}", mensaje);
            //Response.ContentType = "application/json; charset=UTF-8";
            //Response.Write(pRetval);
            //return;
        }

        private void CrearPedido()
        {
            try
            {
                tpDescVisita = "true";
                tpDescInstala = "false";
                tpResultadoVisita = "true";
                lnkShowPopUpTextosVisita = "Datos de la visita";
                cmbTipoVisita = "true";
                cbxReembolsable = "true";

                pRetval = "{\"success\":{0}, \"errors\":{\"reason\": \"{1}\"}, \"op\":{2}, ";
                pRetval += "\"popUpGenerarServicio\":{3}, \"txtNumPedido\":{4}, \"FechaValidez\":{5}, \"oficina\":{6}, \"grpVendVal\":{7}, ";
                pRetval += "\"CodVendedor1\":{8}, \"NomVendedor1\":{9}, \"FechaFact\":{10}, \"txtCodigoCliente\":{11}, \"txtNombreCliente\":{12},";
                pRetval += "\"txtCodigoSolicitante\":{13}, \"txtNombreSolicitante\":{14}, \"txtDireccionSolicitante\":{15}, \"ddlCodigoSolicitante\":{16}, \"txtTelefonoSolicitante\":{17}, ";
                pRetval += "\"txtNifSolicitante\":{18}, \"lnkShowPopUpServicios\":{19}, \"pnlServicios\":{20}, \"lnkShowPopUpTextos\":{21}, \"pnlTextos\":{22}, ";
                pRetval += "\"tpDescVisita\":{23}, \"tpDescInstala\":{24}, \"tpResultadoVisita\":{25}, \"lnkShowPopUpTextosVisita\":{26}, \"cmbTipoVisita\":{27}, ";
                pRetval += "\"cbxReembolsable\":{28} ";

                pRetval += "}";

                string cod = ParametroBC.Instance.getParamValue("CodPedInst");
                if (pTipoDoc.Equals(cod))
                {
                    popUpGenerarServicio = "true";
                    pRetval = pRetval.Replace("{3}", popUpGenerarServicio);
                }
                else
                {
                    if (ParametroBC.Instance.esTipoX(pTipoDoc, "CodConRef"))
                    {
                        EnviaErrores("El tipo de pedido seleccionado debe ser creado con referencia a otro documento.");
                        Response.ContentType = "application/json; charset=UTF-8";
                        Response.Write(pRetval);
                        return;
                    }
                    popUpGenerarServicio = "false";
                    pRetval = pRetval.Replace("{0}", "true");
                    pRetval = pRetval.Replace("{1}", "");
                    pRetval = pRetval.Replace("{2}", "crear");
                    pRetval = pRetval.Replace("{3}", popUpGenerarServicio);
                    //indica que el campo numero pedido sera solo de lectura, por eso true(readonly)
                    txtNumPedido = "true";
                    pRetval = pRetval.Replace("{4}", txtNumPedido);
                    this.calculaFechaValidez();
                    pRetval = pRetval.Replace("{5}", FechaValidez);
                    Session["Operacion"] = "crear";
                    this.cargaDatosUsuario();
                    pRetval = pRetval.Replace("{6}", oficina);
                    pRetval = pRetval.Replace("{7}", grpVendVal);
                    pRetval = pRetval.Replace("{8}", CodVendedor1);
                    pRetval = pRetval.Replace("{9}", NomVendedor1);
                    FechaFact = DateTime.Now.ToShortDateString();
                    pRetval = pRetval.Replace("{10}", FechaFact);

                    if (ParametroBC.Instance.esTipoX(pTipoDoc, "CodPedDatServ"))
                    {
                        this.bloquearCliente("true");
                        //los controles lo activamos o desacticamos según sea el caso.
                        pRetval = pRetval.Replace("{11}", txtCodigoCliente);
                        pRetval = pRetval.Replace("{12}", txtNombreCliente);
                        pRetval = pRetval.Replace("{13}", txtCodigoSolicitante);
                        pRetval = pRetval.Replace("{14}", txtNombreSolicitante);
                        pRetval = pRetval.Replace("{15}", txtDireccionSolicitante);
                        pRetval = pRetval.Replace("{16}", ddlCodigoSolicitante);
                        pRetval = pRetval.Replace("{17}", txtTelefonoSolicitante);
                        pRetval = pRetval.Replace("{18}", txtNifSolicitante);

                        Session["ClienteBloqueado"] = true;
                        lnkShowPopUpServicios = "true";
                        pnlServicios = "true";

                        lnkShowPopUpTextos = "false";
                        pnlTextos = "false";

                        pRetval = pRetval.Replace("{19}", lnkShowPopUpServicios);
                        pRetval = pRetval.Replace("{20}", pnlServicios);
                        pRetval = pRetval.Replace("{21}", lnkShowPopUpTextos);
                        pRetval = pRetval.Replace("{22}", pnlTextos);
                    }
                    else
                    {
                        pRetval = pRetval.Replace("{11}", "");
                        pRetval = pRetval.Replace("{12}", "");
                        pRetval = pRetval.Replace("{13}", "");
                        pRetval = pRetval.Replace("{14}", "");
                        pRetval = pRetval.Replace("{15}", "");
                        pRetval = pRetval.Replace("{16}", "");
                        pRetval = pRetval.Replace("{17}", "");
                        pRetval = pRetval.Replace("{18}", "");

                        lnkShowPopUpServicios = "false";
                        pnlServicios = "false";

                        lnkShowPopUpTextos = "true";
                        pnlTextos = "true";

                        pRetval = pRetval.Replace("{19}", lnkShowPopUpServicios);
                        pRetval = pRetval.Replace("{20}", pnlServicios);
                        pRetval = pRetval.Replace("{21}", lnkShowPopUpTextos);
                        pRetval = pRetval.Replace("{22}", pnlTextos);
                    }

                    if (ParametroBC.Instance.esTipoX(pTipoDoc, "DocsTextosVisitas"))
                    {
                        if (pTipoDoc.Equals("Z036"))
                        {
                            tpDescVisita = "true";
                            tpDescInstala = "false";
                            tpResultadoVisita = "true";
                            lnkShowPopUpTextosVisita = "Datos de la visita";
                            cmbTipoVisita = "true";
                            cbxReembolsable = "true";

                            pRetval = pRetval.Replace("{23}", tpDescVisita);
                            pRetval = pRetval.Replace("{24}", tpDescInstala);
                            pRetval = pRetval.Replace("{25}", tpResultadoVisita);
                            pRetval = pRetval.Replace("{26}", lnkShowPopUpTextosVisita);
                            pRetval = pRetval.Replace("{27}", cmbTipoVisita);
                            pRetval = pRetval.Replace("{28}", cbxReembolsable);
                        }
                        else if (pTipoDoc.Equals("Z037"))
                        {
                            tpDescVisita = "false";
                            tpDescInstala = "true";
                            tpResultadoVisita = "false";
                            lnkShowPopUpTextosVisita = "Datos de la instalación";

                            pRetval = pRetval.Replace("{23}", tpDescVisita);
                            pRetval = pRetval.Replace("{24}", tpDescInstala);
                            pRetval = pRetval.Replace("{25}", tpResultadoVisita);
                            pRetval = pRetval.Replace("{26}", lnkShowPopUpTextosVisita);
                            pRetval = pRetval.Replace("{27}", "");
                            pRetval = pRetval.Replace("{28}", "");
                        }
                    }
                    else
                    {
                        lnkShowPopUpTextosVisita = "";
                        cmbTipoVisita = "false";
                        cbxReembolsable = "false";

                        pRetval = pRetval.Replace("{23}", "");
                        pRetval = pRetval.Replace("{24}", "");
                        pRetval = pRetval.Replace("{25}", "");
                        pRetval = pRetval.Replace("{26}", lnkShowPopUpTextosVisita);
                        pRetval = pRetval.Replace("{27}", cmbTipoVisita);
                        pRetval = pRetval.Replace("{28}", cbxReembolsable);
                    }
                }
                
                //Response.ContentType = "application/json; charset=UTF-8";
                //Response.Write(pRetval);
            }
            catch (Exception ex)
            {
                EnviaErrores(ex.Message);
                //Response.ContentType = "application/json; charset=UTF-8";
                //Response.Write(pRetval);
            }
        }

        private void calculaFechaValidez()
        {
            if (pTipoDoc.Equals(ParametroBC.Instance.getParamValue("CodReserva")))
            {
                double dias = Convert.ToDouble(ParametroBC.Instance.getParamValue("ValidezReserva"));
                FechaValidez = DateTime.Today.AddDays(dias).ToString("dd/MM/yyyy");

            }
            if (ParametroBC.Instance.esTipoOferta(pTipoDoc))
            {
                double dias = Convert.ToDouble(ParametroBC.Instance.getParamValue("ValidezOferta"));
                FechaValidez = DateTime.Today.AddDays(dias).ToString("dd/MM/yyyy");
            }
        }

        private void cargaDatosUsuario()
        {
            if (Session["UsuarioWeb"] != null)
            {
                UsuarioWebBE objUsuarioWeb = (UsuarioWebBE)Session["UsuarioWeb"];
                PersonaBE objPersonaWeb = (PersonaBE)Session["PersonaWeb"];

                if (!string.IsNullOrEmpty(objUsuarioWeb.OfVentas))
                {
                    oficina = objUsuarioWeb.OfVentas;
                }
                if (!string.IsNullOrEmpty(objUsuarioWeb.GrpVend))
                {
                    grpVendVal = objUsuarioWeb.GrpVend;
                }

                CodVendedor1 = objPersonaWeb.CodPersona;
                NomVendedor1 = objPersonaWeb.Descripcion;
            }
        }

        private void CargarPedido(string numPedido, string op)
        {
            //jss = new JavaScriptSerializer();

            CredencialesController.cargarInfo(Request.Params); //(SIEMPRE)
            if (pRetval != "")
            {
                //aca debemos validar si el numero de pedido no viene vacio
                if (!string.IsNullOrEmpty(numPedido))
                {
                    objPedido = new PedidoBE();
                    objPedido = PedidoBC.Instance.leer(numPedido);
                    //validando que el documento ingresado exista.
                    if (objPedido.OrgVentas == null || objPedido.OrgVentas == "")
                    {
                        pRetval = pRetval.Replace("{2}", op);
                        EnviaErrores("No se encontró el documento de venta");
                        //Response.ContentType = "application/json; charset=UTF-8";
                        //Response.Write(pRetval);
                        return;
                    }
                    ////fidelización de clientes
                    //string cod = "";
                    //try
                    //{
                    //    cod = objPedido.Interlocutores.Find(x => x.Funcion == "AG").Cliente.Ruc;
                    //}
                    //catch
                    //{
                    //    cod = "";
                    //}
                    //if (cod != null || cod != "")
                    //{
                    //    ClienteBE objCli = ClienteBC.Instance.leer(objPedido.CodCliente);
                    //    if (objCli != null && objCli.Eventual != false)
                    //    {
                    //        ClienteBE clienteDni = ClienteBC.Instance.busquedaClienteReniec(cod);
                    //    }
                    //}
                    //solo si es copiar
                    if (op == "copiar")
                    {
                        if (!string.IsNullOrEmpty(pTipoDoc))
                        {
                            codTipoDocNuevo = pTipoDoc;
                            codTipoDocAnterior = objPedido.CodTipoDoc;
                            objPedido.CodTipoDoc = codTipoDocNuevo;
                            objPedido.CodTipoDocAnt = codTipoDocAnterior;
                        }
                        objPedido = BuscarPrecios(objPedido);    
                    }
                    
                    foreach (DetalleBE item in objPedido.Detalle)
                    {
                        List<CondicionBE> lstCon = ObtenerCondicionesDescuentos(objPedido, item);
                    }

                    if (objPedido.CodTipoDoc == "Z001")
                    {
                        string desctoAdicionalZD12 = "";
                        if (objPedido.Detalle != null || objPedido.Detalle.Count > 0)
                        {
                            if (objPedido.Detalle[0].DsctoAdicionalZD12 != null)
                            {
                                desctoAdicionalZD12 = Math.Abs(objPedido.Detalle[0].DsctoAdicionalZD12.Importe).ToString();
                                objPedido.dsctoAdicionalZD12tmp = Math.Abs(objPedido.Detalle[0].DsctoAdicionalZD12.LimiteInferior);
                            }
                        }
                    }
                    //cargarStockAMaterial(objPedido);
                    if (objPedido != null)
                    {
                        pRetval = pRetval.Replace("{0}", "true");
                        pRetval = pRetval.Replace("{1}", "");
                        pRetval = pRetval.Replace("{2}", op);
                    }
                    else
                    {
                        EnviaErrores("No se encontró el documento de venta");
                        Response.ContentType = "application/json; charset=UTF-8";
                        Response.Write(pRetval);
                        return;
                    }
                }
                else
                {
                    EnviaErrores("Ingrese un número de pedido válido");
                    Response.ContentType = "application/json; charset=UTF-8";
                    Response.Write(pRetval);
                    return;
                }

                if (ParametroBC.Instance.esTipoX(pTipoDoc, "CodPedDatServ"))
                {
                    this.bloquearCliente("true");
                }
                else
                {
                    showPopPupServicios = "false";
                    panelServicios = "false";
                    showPopPupTextos = "true";
                    panelTextos = "true";
                }

                Session["Pedido"] = objPedido;

                if (objPedido.Tratado && op == "editar")
                {
                    pedidoTratado = "true";
                    pRetval = pRetval.Replace("{16}", pedidoTratado);
                }
                //para cargar la info del cliente:
                if (objPedido != null && !string.IsNullOrEmpty(objPedido.CodCliente))
                {
                    objCliente = new ClienteBE();
                    objCliente = ClienteBC.Instance.leer(objPedido.CodCliente);
                    Session["Cliente"] = objCliente;
                    if (objCliente != null)
                    {
                        Json = JsonConvert.SerializeObject(objCliente, new IsoDateTimeConverter());
                        pRetval = pRetval.Replace("{17}", Json);
                    }
                    else
                    {
                        pRetval = pRetval.Replace("{17}", "");
                    }

                    this.cargarInterlocutores();
                    pRetval = pRetval.Replace("{18}", correo);
                    pRetval = pRetval.Replace("{24}", codigoSolicitante);
                    pRetval = pRetval.Replace("{25}", codigoDestFact);
                    pRetval = pRetval.Replace("{26}", codigoResPago);
                    pRetval = pRetval.Replace("{28}", nombreSolicitante);
                    pRetval = pRetval.Replace("{29}", direccionSolicitante);
                    pRetval = pRetval.Replace("{30}", codigoPostalSolicitante);
                    pRetval = pRetval.Replace("{31}", telefonoSolicitante);
                    pRetval = pRetval.Replace("{32}", nifSolicitante);
                    pRetval = pRetval.Replace("{33}", codigoDestMerc);
                    pRetval = pRetval.Replace("{34}", nombreDestMerc);
                    pRetval = pRetval.Replace("{35}", direccionDestMerc);
                    pRetval = pRetval.Replace("{36}", codigoPostalDestMerc);
                    pRetval = pRetval.Replace("{37}", telefonoDestMerc);
                    pRetval = pRetval.Replace("{38}", nombreDestFact);
                    pRetval = pRetval.Replace("{39}", direccionDestFact);
                    pRetval = pRetval.Replace("{40}", codigoPostalDestFact);
                    pRetval = pRetval.Replace("{41}", telefonoDestFact);
                    pRetval = pRetval.Replace("{42}", nombreResPago);
                    pRetval = pRetval.Replace("{43}", direccionResPago);
                    pRetval = pRetval.Replace("{44}", codigoPostalResPago);
                    pRetval = pRetval.Replace("{45}", telefonoResPago);
                    pRetval = pRetval.Replace("{46}", nifResPago);

                    this.cargaClienteSesion();
                    pRetval = pRetval.Replace("{47}", codigoCliente);
                    pRetval = pRetval.Replace("{48}", nombreCliente);
                    pRetval = pRetval.Replace("{49}", direccionCliente);

                    this.cargarInfoCliente();
                    //carganmos la info de cliente reniec y preguntas y respuestas
                    InterlocutorBE objSolicitante = objPedido.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocCliente")); });
                    ClienteBE objCli = ClienteBC.Instance.leer(objSolicitante.Cliente.Codigo);
                    CargaClienteReniec(objCli, objSolicitante.Cliente);
                }

                Session["Operacion"] = op;

                switch (op.ToLower())
                {
                    case "editar":
                        if (objPedido.Tratado)
                        {
                            pRetval = pRetval.Replace("{0}", "false");
                            pRetval = pRetval.Replace("{1}", "El pedido ya ha sido Facturado");
                            pRetval = pRetval.Replace("{2}", op);
                            Session["PedidoTratado"] = true;
                            pRetval = pRetval.Replace("{16}", pedidoTratado);
                        }
                        //--- si no es una oferta, no se puede modificar el cliente.
                        if (!ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                        {
                            this.bloquearCliente("true");
                            Session["ClienteBloqueado"] = true;
                            clienteBloqueado = "true";
                            pRetval = pRetval.Replace("{11}", clienteBloqueado);
                        }
                        else
                        {
                            this.bloquearCliente("false");
                            clienteBloqueado = "false";
                            pRetval = pRetval.Replace("{11}", clienteBloqueado);
                        }
                        cargarLotesAMaterial(objPedido);
                        break;
                    case "ver":
                        if (objPedido.Tratado)
                        {
                            pRetval = pRetval.Replace("{0}", "false");
                            pRetval = pRetval.Replace("{1}", "El pedido ya ha sido facturado");
                            pRetval = pRetval.Replace("{2}", op);
                            btnGrabar = "false";
                            Session["PedidoTratado"] = true;
                            pedidoTratado = "true";
                            pRetval = pRetval.Replace("{16}", pedidoTratado);
                        }
                        cargarLotesAMaterial(objPedido);
                        break;
                    case "copiar":
                        //-- si es un pedido de servicios Z005, Z013, Z014, ZO02
                        //string codTipoDocAnterior = objPedido.CodTipoDoc;
                        //string codTipoDocNuevo = pTipoDoc;
                        bool esNCND = false;
                        //mtejada(21.11.2011):obtengo materiales para la instalación
                        if (objPedido.CodTipoDoc.Equals("Z037"))
                        {
                            List<InstalaBE> lstInst = new List<InstalaBE>();
                            objPedido.Detalle = new List<DetalleBE>();
                            lstInst = PedidoBC.Instance.listadoInstalacion(objPedido.NumPedido);
                            foreach (InstalaBE inst in lstInst)
                            {
                                addItem(inst.ZcodServ, inst.Cantidad);
                            }
                        }
                        //-- verificar que el pedido original no tenga entrega
                        if (ParametroBC.Instance.esTipoX(codTipoDocNuevo, "CodPedServ"))
                        {
                            if (codTipoDocAnterior == codTipoDocNuevo)
                            {
                                // Error: No se pueden copiar dos pedidos de servicio
                                objPedido = null;
                                Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrCopia");
                                Session.Remove("Operacion");
                                break;
                            }
                            else if (objPedido.TieneEntrega && !codTipoDocNuevo.Equals("Z036") && !codTipoDocNuevo.Equals("Z037"))
                            {
                                //comentado a pedido de usuario decor, rhuapaya 05.07.2012 @@@
                                //// Error: El pedido original ya tiene entrega.
                                //objPedido = null;
                                //Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrServ");
                                //Session.Remove("Operacion");
                                //break;
                            }
                        }
                        //--- si no es NC/ND, entonces se cargan los datos del usuario logeado
                        if (!ParametroBC.Instance.esTipoX(codTipoDocNuevo, "CodNCND"))
                        {
                            //si se crea uno nuevo si se carga la info del usuario loggeado
                            this.cargaDatosUsuario();
                        }
                        else
                        {//--- si es NC / ND no copiar la posición superior
                            esNCND = true;
                        }
                        //-- si es copia no se cargan los bloqueos
                        objPedido.BloqueoEntrega = "";
                        objPedido.BloqueoFactura = "";
                        objPedido.Fecha = DateTime.Now;

                        this.calculaFechaValidez();
                        if (FechaValidez.Trim() != "")
                        {
                            objPedido.FechaValidez = Convert.ToDateTime(FechaValidez);    
                        }
                        

                        if (!ParametroBC.Instance.esTipoServicio(codTipoDocAnterior))
                        {
                            if (ParametroBC.Instance.esTipoServicio(codTipoDocNuevo))
                            {
                                objPedido.Detalle = new List<DetalleBE>();
                            }
                        }
                        //-- no se copian los motivos de rechazo:
                        foreach (DetalleBE itm in objPedido.Detalle)
                        {
                            itm.MotivoRechazo = "";
                            //--- es nc/nd Y posición de combo (en oferta o pedido)
                            if (esNCND && itm.TipoPosicion != "Z017" && itm.TipoPosicion != "Z012")
                            {
                                itm.PosSup = "0";
                            }
                            //si se copia de oferta a pedido, cambiar los tipos de posición (kit/combos)
                            #region cambio de TPOS
                            if (ParametroBC.Instance.esTipoOferta(codTipoDocAnterior))
                            {
                                if (!ParametroBC.Instance.esTipoOferta(codTipoDocNuevo) || codTipoDocNuevo.Equals("Z004"))
                                {
                                    switch (itm.TipoPosicion)
                                    {
                                        case "Z016":
                                            itm.TipoPosicion = "Z011";
                                            break;
                                        case "Z017":
                                            itm.TipoPosicion = "Z012";
                                            break;
                                        case "Z014":
                                            itm.TipoPosicion = "Z007";
                                            break;
                                        case "Z015":
                                            itm.TipoPosicion = "Z008";
                                            break;
                                    }
                                }
                            }
                            else
                            {
                                if (ParametroBC.Instance.esTipoOferta(codTipoDocNuevo) || !codTipoDocNuevo.Equals("Z004"))
                                {
                                    switch (itm.TipoPosicion)
                                    {
                                        case "Z011":
                                            itm.TipoPosicion = "Z016";
                                            break;
                                        case "Z012":
                                            itm.TipoPosicion = "Z017";
                                            break;
                                        case "Z007":
                                            itm.TipoPosicion = "Z014";
                                            break;
                                        case "Z008":
                                            itm.TipoPosicion = "Z015";
                                            break;
                                    }
                                }
                            }
                            #endregion

                            itm.TipoPosAnt = itm.TipoPosicion;
                        }
                        //objPedido.CodTipoDoc = codTipoDocNuevo;
                        //objPedido.CodTipoDocAnt = codTipoDocAnterior;
                        cargarLotesAMaterial(objPedido);
                        break;
                }
                //Session["Pedido"] = objPedido;
                if (objPedido != null)
                {
                    Session["MaterialesList"] = objPedido.Detalle;
                }

                this.cargaPedido();

                //serializamos los datos
                string jSON = string.Empty;
                //objPedido = (PedidoBE)Session["Pedido"];
                ////validamos si el texto viene con valor, en caso no venga le cargamos un valor vacio
                ////esto por el tema que sencha no lo reconoce cuando no tiene nada
                //if (objPedido.Textos.Count <= 0 || objPedido.Textos == null)
                //{
                //    List<TextoBE> lstT = new List<TextoBE>();
                //    objPedido.Textos = null;
                //}
                //vamos a reemplazar caracteres no permitidos en materiales
                foreach (DetalleBE item in objPedido.Detalle)
                {
                    item.DescMaterial = item.DescMaterial.Replace("\"", "").Replace("\'", "");
                    //item.DescMaterialTicketera = item.DescMaterialTicketera.Replace("\"", "").Replace("\'", "");
                    item.Material.DescMaterial = item.DescMaterial.Replace("\"", "").Replace("\'", "");
                    
                    //foreach (MaterialBE itemM in item.Material)
                    //{
                    //    itemM.DescMaterial = itemM.DescMaterial.Replace("\"", "").Replace("\'", "");
                    //}
                }

                jSON = JsonConvert.SerializeObject(objPedido, new IsoDateTimeConverter());
                pRetval = pRetval.Replace("{0}", "true");
                pRetval = pRetval.Replace("{1}", "");
                pRetval = pRetval.Replace("{58}", jSON);
            }
        }

        private void bloquearCliente(string param)
        {
            txtCodigoCliente = param;
            txtNombreCliente = param;
            txtCodigoSolicitante = param;
            txtNombreSolicitante = param;
            txtDireccionSolicitante = param;
            ddlCodigoSolicitante = (param == "false" ? "true" : param);
            txtTelefonoSolicitante = param;
            txtNifSolicitante = param;

        }

        private void cargarInterlocutores()
        {
            if (Session["Cliente"] != null)
            {
                ClienteBE pObjCliente = (ClienteBE)Session["Cliente"];
                if (pObjCliente != null && pObjCliente.Codigo != null)
                {
                    if (Session["Pedido"] != null)
                    {
                        objPedido = new PedidoBE();
                        objPedido = (PedidoBE)Session["Pedido"];
                        correo = objPedido.Mail;
                    }
                    if (pObjCliente.Eventual)
                    {
                        //--- habilitar campos de solicitante
                        txtCodigoSolicitante = "true";
                        txtNombreSolicitante = "false";
                        txtDireccionSolicitante = "false";
                        ddlCodigoSolicitante = "true";
                        txtTelefonoSolicitante = "false";
                        txtNifSolicitante = "false";

                        codigoSolicitante = pObjCliente.Codigo;
                        codigoDestMerc = pObjCliente.Codigo;
                        codigoDestFact = pObjCliente.Codigo;
                        codigoResPago = pObjCliente.Codigo;
                    }
                    else
                    {
                        //--- deshabilitar campos del solicitante
                        txtCodigoSolicitante = "true";
                        txtNombreSolicitante = "true";
                        txtDireccionSolicitante = "true";
                        ddlCodigoSolicitante = "false";
                        txtTelefonoSolicitante = "true";
                        txtNifSolicitante = "true";

                        codigoSolicitante = pObjCliente.Codigo;
                        nombreSolicitante = pObjCliente.Descripcion;
                        direccionSolicitante = pObjCliente.Direccion;

                        try
                        {
                            //ddlCodpSolicitante.SelectedValue
                            codigoPostalSolicitante = pObjCliente.CodigoPostal;
                        }
                        catch
                        {
                            codigoPostalSolicitante = string.Empty;
                        }

                        telefonoSolicitante = pObjCliente.Telefono;
                        nifSolicitante = pObjCliente.Ruc;
                        codigoDestMerc = pObjCliente.Codigo;
                        nombreDestMerc = pObjCliente.Descripcion;
                        direccionDestMerc = pObjCliente.Direccion;

                        try
                        {
                            codigoPostalDestMerc = pObjCliente.CodigoPostal;
                        }
                        catch
                        {
                            codigoPostalDestMerc = string.Empty;
                        }

                        telefonoDestMerc = pObjCliente.Telefono;
                        codigoDestFact = pObjCliente.Codigo;
                        nombreDestFact = pObjCliente.Descripcion;
                        direccionDestFact = pObjCliente.Direccion;

                        try
                        {
                            codigoPostalDestFact = pObjCliente.CodigoPostal;
                        }
                        catch
                        {
                            codigoPostalDestFact = string.Empty;
                        }
                        telefonoDestFact = pObjCliente.Telefono;
                        //---
                        codigoResPago = pObjCliente.Codigo;
                        nombreResPago = pObjCliente.Descripcion;
                        direccionResPago = pObjCliente.Direccion;

                        try
                        {
                            codigoPostalResPago = pObjCliente.CodigoPostal;
                        }
                        catch
                        {
                            codigoPostalResPago = string.Empty;
                        }
                        telefonoResPago = pObjCliente.Telefono;
                        nifResPago = pObjCliente.Ruc;

                    }
                }
            }
        }

        private void cargaClienteSesion()
        {
            if (Session["Cliente"] != null)
            {
                objCliente = (ClienteBE)Session["Cliente"];
                if (objCliente.Codigo != null)
                {
                    codigoCliente = objCliente.Codigo;
                    nombreCliente = objCliente.Descripcion;
                    direccionCliente = objCliente.Descripcion;
                }
            }
        }

        private string addItem(string pCodMat, decimal pCant)
        {
            string retMsg = "";

            try
            {
                this.objPedido = (PedidoBE)Session["Pedido"];
                List<DetalleBE> lstMateriales = (this.objPedido.Detalle == null) ? new List<DetalleBE>() : this.objPedido.Detalle;

                DetalleBE objDetalle = new DetalleBE();
                objDetalle.CodMaterial = pCodMat;
                objDetalle.Cantidad = pCant;

                MaterialBE objMaterial = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, this.objPedido.OrgVentas, this.objPedido.CanalDist);

                if (objMaterial != null)
                {
                    objDetalle.DescMaterial = objMaterial.DescMaterial;
                    objDetalle.CodUMedida = objMaterial.CodUMedida;
                    objDetalle.Peso = objMaterial.Peso;
                    objDetalle.UMedidaRendimiendo = objMaterial.UMedidaRendimiendo;
                    objDetalle.ValorRendimiento = objMaterial.ValorRendimiento;
                    objDetalle.TipoMaterial = objMaterial.TipoMaterial;

                    objDetalle.Material = objMaterial;

                    //si UM = UNidad => redondear al entero mayor
                    if (ParametroBC.Instance.esTipoX(objDetalle.CodUMedida, "UMUnidad"))
                    {
                        objDetalle.Cantidad = (objDetalle.Cantidad > decimal.Truncate(objDetalle.Cantidad)) ? decimal.Truncate(objDetalle.Cantidad) + 1 : objDetalle.Cantidad;
                    }
                    //--- calcular rendimiento
                    if (!ParametroBC.Instance.esTipoX(objDetalle.Material.Tipo, "TipoMatServicio") &&
                        ParametroBC.Instance.esTipoX(objDetalle.Material.UMedidaRendimiendo, "UMRendimiento"))
                    {
                        objDetalle.Cantidad = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                        //objDetalle.Cantidad = this.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento);
                    }

                    bool auxC = false;
                    //--- cargar data de prioridad de entrega en base a la cond de exp.
                    if (!string.IsNullOrEmpty(this.objPedido.CondExp) && !pTipoDoc.Equals("Z037"))
                    {
                        objDetalle.PrioridadEntrega = this.objPedido.CondExp;
                        auxC = true;
                    }
                    /*20110714 Inicio WCA  */
                    string canalesCondDesNor = ParametroBC.Instance.getParamValue("CondPriorDespNormal");
                    if (!string.IsNullOrEmpty(canalesCondDesNor))
                    {
                        string[] aCanalCond = canalesCondDesNor.Split(',');
                        for (int iCan = 0; iCan < aCanalCond.Length; iCan++)
                        {
                            if (aCanalCond[iCan].Equals(pCanalDist))
                            {
                                objDetalle.PrioridadEntrega = ParametroBC.Instance.getParamValue("PriorDetReparto");
                                break;
                            }
                        }

                    }
                    /*20110714 Fin  */
                    //--- cargar fecha de entrega
                    if (this.objPedido.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                    {
                        objDetalle.Repartos[0].FechaEntrega = this.objPedido.FechaEntrega;
                        auxC = true;
                    }
                    if (auxC)
                    {
                        this.calculaFechaEntregaItem(objDetalle);
                    }
                    objDetalle.Repartos[0].CantPed = objDetalle.Cantidad;
                    objDetalle.Repartos[0].CantConf = objDetalle.Cantidad;
                    //--- cálculo de posición
                    string tmpPos = "";
                    if (lstMateriales.Count > 0)
                    {
                        tmpPos = lstMateriales[lstMateriales.Count - 1].Posicion;
                    }
                    else
                    {
                        tmpPos = "00";
                    }
                    int posi = Convert.ToInt16(tmpPos) + 10;
                    Session["ultimaPosAdd"] = posi;
                    objDetalle.Posicion = posi.ToString();

                    lstMateriales.Add(objDetalle);

                    //--- validar si es un material Z004/Z001 combo/kit
                    if (ParametroBC.Instance.esTipoX(objMaterial.Tipo, "TipoMatCombo"))
                    {
                        //buscar materiales asociados y añadirlos
                        string pTipoPos = "";

                        List<DetalleBE> lstDetalle = PedidoBC.Instance.buscaTipoPosicion(this.objPedido.CodTipoDoc, objMaterial.CodMaterial, this.objPedido.OrgVentas,
                                          this.objPedido.CanalDist, out pTipoPos);
                        objDetalle.TipoPosicion = pTipoPos.Equals("") ? objDetalle.TipoPosicion : pTipoPos;

                        //--- si tiene elementos, entonces es un KIT o Combo
                        foreach (DetalleBE item in lstDetalle)
                        {
                            item.DescMaterial = item.Material.DescMaterial;
                            item.CodUMedida = item.Material.CodUMedida;
                            item.Peso = item.Material.Peso;
                            item.UMedidaRendimiendo = item.Material.UMedidaRendimiendo;
                            item.ValorRendimiento = item.Material.ValorRendimiento;
                            item.TipoMaterial = item.Material.TipoMaterial;

                            posi += 10;
                            item.Posicion = posi.ToString();
                            item.PosSup = objDetalle.Posicion;

                            item.Cantidad = item.CantComp * objDetalle.Cantidad;
                            //si UM = UNidad => redondear al entero mayor
                            if (ParametroBC.Instance.esTipoX(item.CodUMedida, "UMUnidad"))
                            {
                                item.Cantidad = (item.Cantidad > decimal.Truncate(item.Cantidad)) ? decimal.Truncate(item.Cantidad) + 1 : item.Cantidad;
                            }
                            //--------------------
                            if (item.Material == null)
                            {
                                item.Material = MaterialBC.Instance.leerMaterial(item.CodMaterial, this.objPedido.OrgVentas, this.objPedido.CanalDist);
                            }
                            //--- calcular rendimiento
                            if (!ParametroBC.Instance.esTipoX(item.Material.Tipo, "TipoMatServicio") &&
                                ParametroBC.Instance.esTipoX(item.Material.UMedidaRendimiendo, "UMRendimiento"))
                            {
                                item.Cantidad = PedidoBC.Instance.calculaRendimiento(item.Cantidad, item.ValorRendimiento); //rgutierrez 15.11.2011
                                //item.Cantidad = this.calculaRendimiento(item.Cantidad, item.ValorRendimiento);
                            }

                            switch (objDetalle.TipoPosicion)
                            {
                                case "Z011":
                                    item.TipoPosicion = "Z012";
                                    break;
                                case "Z016":
                                    item.TipoPosicion = "Z017";
                                    break;
                                case "Z007":
                                    item.TipoPosicion = "Z008";
                                    break;
                                case "Z014":
                                    item.TipoPosicion = "Z015";
                                    break;
                            }

                            auxC = false;
                            //--- cargar data de prioridad de entrega en base a la cond de exp.
                            if (!string.IsNullOrEmpty(this.objPedido.CondExp))
                            {
                                item.PrioridadEntrega = this.objPedido.CondExp;
                                auxC = true;
                            }
                            /*20110714 Inicio WCA  */
                            if (!string.IsNullOrEmpty(canalesCondDesNor))
                            {
                                string[] aCanalCond = canalesCondDesNor.Split(',');
                                for (int iCan = 0; iCan < aCanalCond.Length; iCan++)
                                {
                                    if (aCanalCond[iCan].Equals(pCanalDist))
                                    {
                                        item.PrioridadEntrega = ParametroBC.Instance.getParamValue("PriorDetReparto");
                                        break;
                                    }
                                }

                            }
                            /*20110714 Fin  */

                            //--- cargar fecha de entrega
                            if (this.objPedido.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                            {
                                objDetalle.Repartos[0].FechaEntrega = this.objPedido.FechaEntrega;
                                auxC = true;
                            }
                            if (auxC)
                            {
                                this.calculaFechaEntregaItem(item);
                            }
                            objDetalle.Repartos[0].CantPed = item.Cantidad;
                            objDetalle.Repartos[0].CantConf = item.Cantidad;
                            //--- solo agregar los q no hayan sido agregados antes
                            lstMateriales.Add(item);
                        }
                    }
                    this.objPedido.Detalle = lstMateriales;
                    Session["Pedido"] = this.objPedido;
                }
                else
                {
                    retMsg = "No se encontró el material.";
                }
            }
            catch (Exception ex)
            {
                retMsg = ex.Message;
            }
            return retMsg;
        }

        private void calculaFechaEntregaItem(DetalleBE objDetalle)
        {
            DateTime fechaCalculada, fechaActual = DateTime.Today;
            double factor = 0;
            //----
            if (ParametroBC.Instance.esTipoX(objDetalle.PrioridadEntrega, "CodPrioEntMas2"))
            {
                factor = 2;
            }
            else if (ParametroBC.Instance.esTipoX(objDetalle.PrioridadEntrega, "CodPrioEntMas1"))
            {
                factor = 1;
            }
            else
            {
                factor = 0;
            }
            //-----
            int count = Convert.ToInt32(factor);
            //Si es domingo pasa como si fuera lunes
            if (fechaActual.DayOfWeek == DayOfWeek.Sunday)
            {
                count += 1;
            }
            fechaCalculada = fechaActual;
            for (int i = 1; i <= count; i++)
            {
                if (((string)Session["Operacion"]).Equals("crear"))
                {
                    fechaCalculada = fechaCalculada.AddDays(1);
                    if (fechaCalculada.DayOfWeek == DayOfWeek.Sunday)
                    {
                        fechaCalculada = fechaCalculada.AddDays(1);
                    }
                }
            }
            //--- múltiples fechas de reparto:
            if (objDetalle.Repartos.Count == 0) { objDetalle.Repartos.Add(new RepartoBE()); }
            foreach (RepartoBE itmRep in objDetalle.Repartos)
            {
                if (fechaCalculada > itmRep.FechaEntrega && ((string)Session["Operacion"]).Equals("crear"))//mtejada
                {
                    itmRep.FechaEntrega = fechaCalculada;
                }
                else if (itmRep.FechaEntrega.DayOfWeek == DayOfWeek.Sunday)
                {
                    itmRep.FechaEntrega = itmRep.FechaEntrega.AddDays(1);
                }
            }
        }

        private void EditarPedido()
        {
            try
            {
                pRetval = "{\"success\":{0}, \"errors\":{\"reason\": \"{1}\"}, \"op\":{2}, ";
                pRetval += "\"xxxx\":{3}, \"xxxx\":{4}, \"xxxx\":{5}, \"xxxx\":{6}, \"xxxx\":{7}, ";
                pRetval += "\"xxxx\":{8}, \"xxxx\":{9}, \"xxxx\":{10}, \"xxxx\":{11}, \"xxxx\":{12}, ";
                pRetval += "\"xxxx\":{13}, \"xxxx\":{14}, \"xxxx\":{15}, \"xxxx\":{16}, \"xxxx\":{17}, ";
                pRetval += "\"xxxx\":{18}, \"xxxx\":{19}, \"xxxx\":{20}, \"xxxx\":{21}, \"xxxx\":{22}, ";
                pRetval += "}";

                if (pNumPedido.Trim().Equals(string.Empty))
                {
                    pRetval = pRetval.Replace("{0}", "false");
                    pRetval = pRetval.Replace("{1}", "Debe ingresar el número de documento comercial que se quiere editar.");
                    //pRetval = pRetval.Replace("{2}", op);
                }
                else
                {
                    //cargar info del pedido para editarla.
                    this.CargarPedido(pNumPedido, "editar");
                    objPedido = (PedidoBE)Session["Pedido"];

                    DescuentoTotal = (objPedido.Detalle[0].DctoGenericoZD08.Importe * 10).ToString();

                    foreach (DetalleBE d in objPedido.Detalle)
                    {
                        d.DctoDecorPorc.ImporteAnterior = d.DctoDecorPorc.Importe;
                    }
                    Session["Pedido"] = objPedido;
                    ShowPopPupTextosVisitas = "";

                    if (ParametroBC.Instance.esTipoX(pTipoDoc, "DocsTextosVisitas"))
                    {
                        if (pTipoDoc.Equals("Z036"))
                        {
                            tpDescVisita = "true";
                            tpDescInstala = "false";
                            tpResultadoVisita = "true";
                            TextosVisita = "Datos de la visita";
                            cmbTipoVisita = "true";
                            cbxReembolsable = "true";
                        }
                        else if (pTipoDoc.Equals("Z037"))
                        {
                            tpResultadoVisita = "true";
                            ShowPopPupTextosVisitas = "Datos de la instalación";
                            tpDescVisita = "true";
                            tpDescInstala = "false";
                        }
                    }
                    else
                    {
                        ShowPopPupTextosVisitas = "";
                        cmbTipoVisita = "false";
                        cbxReembolsable = "false";
                    }
                }
            }
            catch (Exception ex)
            {
                //tcMain.Enabled = false;
                //Session["Mensaje"] = ex.Message;
            }
        }

        private void cargaPedido()
        {
            if (Session["Pedido"] != null)
            {
                objPedido = (PedidoBE)Session["Pedido"];

                if (!string.IsNullOrEmpty(objPedido.NumPedido))
                {
                    pNumPedido = objPedido.NumPedido;
                }
                if (!objPedido.OrgVentas.Equals(string.Empty))
                {
                    OrgVtas = objPedido.OrgVentas;
                    pRetval = pRetval.Replace("{63}", OrgVtas);
                }
                if (!objPedido.CanalDist.Equals(string.Empty))
                {
                    CanalDist = objPedido.CanalDist;
                    pRetval = pRetval.Replace("{64}", CanalDist);
                }
                foreach (DetalleBE item in objPedido.Detalle)
                {
                    item.TipoMaterial = item.Material.TipoMaterial;
                }
                if (!objPedido.CodTipoDoc.Equals(string.Empty))
                {
                    pTipoDoc = objPedido.CodTipoDoc;
                }

                if (!objPedido.CodOficina.Equals(string.Empty))
                {
                    oficina = objPedido.CodOficina;
                    pRetval = pRetval.Replace("{52}", oficina);
                }

                if (ParametroBC.Instance.esTipoX(pTipoDoc.Trim(), "Calzada"))
                {
                    btnPlanFact = "true"; //falta adicionar al retval
                }
                else
                {
                    btnPlanFact = "false"; //falta adicionar al retval
                }
                BloqueoEntrega = objPedido.BloqueoEntrega;
                Moneda = objPedido.Moneda;
                CondicionesPago = objPedido.CondPago;
                BloqueoFactura = objPedido.BloqueoFactura;
                CondExp = objPedido.CondExp;
                GrupoCond = objPedido.GrupoCond;
                Motivo = objPedido.Motivo;
                TextosVisita = "";

                pRetval = pRetval.Replace("{65}", BloqueoEntrega);
                pRetval = pRetval.Replace("{66}", Moneda);
                pRetval = pRetval.Replace("{62}", CondicionesPago);
                pRetval = pRetval.Replace("{67}", BloqueoFactura);
                pRetval = pRetval.Replace("{61}", CondExp);
                pRetval = pRetval.Replace("{68}", GrupoCond);
                pRetval = pRetval.Replace("{69}", Motivo);
                pRetval = pRetval.Replace("{70}", TextosVisita);

                if (pTipoDoc.Equals("Z036"))
                {
                    cmbTipoVisita = "true";
                    cbxReembolsable = "true";
                    TipoVisita = objPedido.TipoVisita;
                    cbxReembolsable = objPedido.Reenbolsable.ToString();

                    ShowPopPupTextosVisitas = "Datos de la visita";
                    ShowPedidosAsociados = "";

                    pRetval = pRetval.Replace("{71}", TipoVisita);
                    pRetval = pRetval.Replace("{72}", cbxReembolsable);
                }
                else if (pTipoDoc.Equals("Z037"))
                {
                    cmbTipoVisita = "false";
                    cbxReembolsable = "false";

                    pRetval = pRetval.Replace("{72}", cbxReembolsable);

                    ShowPedidosAsociados = "Pedidos Asociados";
                    ShowPopPupTextosVisitas = "Datos de la instalación";
                    cargarPedInstala(objPedido);
                }

                OrdenCompra = objPedido.OrdenCompra;
                TipoCambio = objPedido.TipoCambio.ToString();
                Fecha = objPedido.FechaString;
                FechaValidez = objPedido.FechaValidezString;
                FechaEntrega = objPedido.FechaEntregaString;
                FechaFact = objPedido.FechaFacturacion.ToShortDateString();
                NomProyecto = objPedido.nomProyecto;
                Npisos = objPedido.Znpiso;
                chkAscensor = objPedido.Zasensor.ToString();
                //-- numericos
                PesoTotal = string.Format("{0:n3}", objPedido.PesoTotal);
                SimbTotal = SimbSubTotal = ParametroBC.Instance.getParamValue(objPedido.Moneda);
                MensajeTC = objPedido.Moneda == "PEN" ? "" : ParametroBC.Instance.getParamValue("msgWarningTC");
                SubTotal = string.Format("{0:n2}", objPedido.SubTotal);
                IGV = string.Format("{0:n2}", objPedido.Igv);
                Total = string.Format("{0:n2}", objPedido.Total);
                
                //-----------------------
                pRetval = pRetval.Replace("{73}", OrdenCompra);
                pRetval = pRetval.Replace("{74}", TipoCambio);
                pRetval = pRetval.Replace("{75}", Fecha);
                pRetval = pRetval.Replace("{76}", FechaValidez);
                pRetval = pRetval.Replace("{77}", FechaEntrega);
                pRetval = pRetval.Replace("{78}", FechaFact);
                pRetval = pRetval.Replace("{79}", NomProyecto);
                pRetval = pRetval.Replace("{80}", Npisos);
                pRetval = pRetval.Replace("{81}", chkAscensor);
                pRetval = pRetval.Replace("{82}", PesoTotal);
                pRetval = pRetval.Replace("{83}", SimbTotal);
                pRetval = pRetval.Replace("{84}", MensajeTC);
                pRetval = pRetval.Replace("{85}", SubTotal);
                pRetval = pRetval.Replace("{86}", IGV);
                pRetval = pRetval.Replace("{87}", Total);
                //apasion
                pRetval = pRetval.Replace("{121}", string.Format("{0:n2}", objPedido.TotalDcto));
                //-----------------------
                Session["Pedido"] = objPedido;
                this.cargaTextosSession();
                this.cargaInterlocutoresSession();
            }
        }

        private void cargarPedInstala(PedidoBE pPedido)
        {
            PedidoVenta12 = pPedido.PedidoVenta1;
            PedidoVenta22 = pPedido.PedidoVenta2;
            PedidoVenta32 = pPedido.PedidoVenta3;
            PedidoVenta42 = pPedido.PedidoVenta4;
            PedidoVisita12 = pPedido.PedidoVisita1;
            PedidoVisita22 = pPedido.PedidoVisita2;
            PedidoVisita32 = pPedido.PedidoVisita3;
            PedidoVisita42 = pPedido.PedidoVisita4;

            pRetval = pRetval.Replace("{88}", PedidoVenta12);
            pRetval = pRetval.Replace("{89}", PedidoVenta22);
            pRetval = pRetval.Replace("{90}", PedidoVenta32);
            pRetval = pRetval.Replace("{91}", PedidoVenta42);
            pRetval = pRetval.Replace("{92}", PedidoVisita12);
            pRetval = pRetval.Replace("{93}", PedidoVisita22);
            pRetval = pRetval.Replace("{94}", PedidoVisita32);
            pRetval = pRetval.Replace("{95}", PedidoVisita42);
        }

        private void cargaTextosSession()
        {
            if (Session["Pedido"] != null)
            {
                PedidoBE objTmpPed = (PedidoBE)Session["Pedido"];
                if (objTmpPed.Textos != null)
                {
                    TextoBE objTextoAtencion = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoAtencion")); });
                    if (objTextoAtencion != null) { TextoAtencion = objTextoAtencion.Descripcion; }

                    TextoBE objTextoTransporte = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoTransporte")); });
                    if (objTextoTransporte != null) { TextoTransporte = objTextoTransporte.Descripcion; }

                    TextoBE objTextoTiempoEntrega = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoTiempoEntrega")); });
                    if (objTextoTiempoEntrega != null) { TextoTiempoEntrega = objTextoTiempoEntrega.Descripcion; }

                    TextoBE objTextoObsAdministrativas = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoObsAdministrativas")); });
                    if (objTextoObsAdministrativas != null) { TextoObsAdministrativas = objTextoObsAdministrativas.Descripcion; }

                    TextoBE objTextoRefFactura = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoRefFactura")); });
                    if (objTextoRefFactura != null) { TextoRefFactura = objTextoRefFactura.Descripcion; }

                    TextoBE objTextoRefDireccion = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoRefDireccion")); });
                    if (objTextoRefDireccion != null) { TextoRefDireccion = objTextoRefDireccion.Descripcion; }

                    if (ParametroBC.Instance.esTipoX(pTipoDoc, "DocsTextosVisitas"))
                    {

                        TextoBE objContactoVisita = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoContactoVisita")); });
                        if (objContactoVisita != null)
                        {
                            TextoContactoVisita = objContactoVisita.Descripcion;
                        }

                        TextoBE objDatosAdicVisita = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoDatosAdicVisita")); });
                        if (objDatosAdicVisita != null)
                        {
                            TextDatosAdicClienteVisita = objDatosAdicVisita.Descripcion;
                        }

                        TextoBE objResultadoVisita = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoResultadoVisita")); });
                        if (pTipoDoc.Equals("Z036") && objResultadoVisita != null)
                        {
                            tpResultadoVisita = "true";
                            TextoResultadoVisita = objResultadoVisita.Descripcion;
                        }
                        else if (pTipoDoc.Equals("Z037"))
                        {
                            tpResultadoVisita = "false";
                        }

                        TextoBE objTelefonoVisita = objTmpPed.Textos.Find(delegate(TextoBE txts)
                        {
                            return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoTelefonoVisita"));
                        });
                        if (TextTelefonosVisita != null && (pTipoDoc.Equals("Z036") || pTipoDoc.Equals("Z037")) && objTelefonoVisita != null)
                        {
                            TextTelefonosVisita = objTelefonoVisita.Descripcion;
                        }
                        TextoBE objDescripVisita = objTmpPed.Textos.Find(delegate(TextoBE txts)
                        {
                            return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoDescripVisita"));
                        });
                        if (TextDescVisita != null && pTipoDoc.Equals("Z036") && objDescripVisita != null)
                        {
                            tpDescVisita = "true";
                            tpDescInstala = "false";
                            TextDescVisita = objDescripVisita.Descripcion;
                        }
                        TextoBE objDescripInstala = objTmpPed.Textos.Find(delegate(TextoBE txts)
                        {
                            return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoDescripInstala"));
                        });
                        if (pTipoDoc.Equals("Z037") && objDescripInstala != null)
                        {
                            tpDescVisita = "false";
                            tpDescInstala = "true";
                            TextDescInstala = objDescripInstala.Descripcion;
                        }
                    }
                    else
                    {
                        ShowPopPupTextosVisitas = "";
                    }
                }
            }
        }

        private void cargaInterlocutoresSession()
        {
            if (Session["Pedido"] != null)
            {
                PedidoBE objTmpPed = (PedidoBE)Session["Pedido"];
                if (objTmpPed.Interlocutores != null)
                {
                    // cargar data
                    //-- solicitante AG
                    InterlocutorBE objSolicitante = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocCliente")); });
                    if (objSolicitante != null)
                    {
                        if (objSolicitante.Cliente != null)
                        {
                            codigoSolicitante = objSolicitante.Cliente.Codigo;
                            nombreSolicitante = objSolicitante.Cliente.Descripcion;
                            direccionSolicitante = objSolicitante.Cliente.Direccion;
                            //correo
                            if (pCorreo != null)
                            {
                                if (pCorreo.Equals(""))
                                    correo = objSolicitante.Cliente.Mail;
                            }
                            else
                            {
                                correo = objSolicitante.Cliente.Mail;
                            }

                            try
                            {
                                codigoPostalSolicitante = objSolicitante.Cliente.CodigoPostal;
                            }
                            catch
                            {
                                codigoPostalSolicitante = string.Empty;
                            }
                            telefonoSolicitante = objSolicitante.Cliente.Telefono;
                            nifSolicitante = objSolicitante.Cliente.Ruc;

                            pRetval = pRetval.Replace("{24}", codigoSolicitante);
                            pRetval = pRetval.Replace("{28}", nombreSolicitante);
                            pRetval = pRetval.Replace("{29}", direccionSolicitante);
                            pRetval = pRetval.Replace("{18}", correo);
                            pRetval = pRetval.Replace("{30}", codigoPostalSolicitante);
                            pRetval = pRetval.Replace("{31}", telefonoSolicitante);
                            pRetval = pRetval.Replace("{32}", nifSolicitante);
                        }
                    }
                    //-- solicitante WE
                    InterlocutorBE objDestMercaderia = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocDestMerc")); });
                    if (objDestMercaderia != null)
                    {
                        if (objDestMercaderia.Cliente != null)
                        {
                            codigoDestMerc = objDestMercaderia.Cliente.Codigo;
                            nombreDestMerc = objDestMercaderia.Cliente.Descripcion;
                            direccionDestMerc = objDestMercaderia.Cliente.Direccion;
                            try
                            {
                                codigoPostalDestMerc = objDestMercaderia.Cliente.CodigoPostal;
                            }
                            catch
                            {
                                codigoPostalDestMerc = string.Empty;
                            }
                            telefonoDestMerc = objDestMercaderia.Cliente.Telefono;

                            pRetval = pRetval.Replace("{33}", codigoDestMerc);
                            pRetval = pRetval.Replace("{34}", nombreDestMerc);
                            pRetval = pRetval.Replace("{35}", direccionDestMerc);
                            pRetval = pRetval.Replace("{36}", codigoPostalDestMerc);
                            pRetval = pRetval.Replace("{37}", telefonoDestMerc);
                        }
                    }
                    //-- solicitante RE
                    InterlocutorBE objDestFactura = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocDestFact")); });
                    if (objDestFactura != null)
                    {
                        if (objDestFactura.Cliente != null)
                        {
                            codigoDestFact = objDestFactura.Cliente.Codigo;
                            nombreDestFact = objDestFactura.Cliente.Descripcion;
                            direccionDestFact = objDestFactura.Cliente.Direccion;
                            try
                            {
                                codigoPostalDestFact = objDestFactura.Cliente.CodigoPostal;
                            }
                            catch { codigoPostalDestFact = string.Empty; }
                            telefonoDestFact = objDestFactura.Cliente.Telefono;

                            pRetval = pRetval.Replace("{25}", codigoDestFact);
                            pRetval = pRetval.Replace("{38}", nombreDestFact);
                            pRetval = pRetval.Replace("{39}", direccionDestFact);
                            pRetval = pRetval.Replace("{40}", codigoPostalDestFact);
                            pRetval = pRetval.Replace("{41}", telefonoDestFact);
                        }
                    }
                    //-- solicitante RG
                    InterlocutorBE objResPago = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocResPago")); });
                    if (objResPago != null)
                    {
                        if (objResPago.Cliente != null)
                        {
                            codigoResPago = objResPago.Cliente.Codigo;
                            nombreResPago = objResPago.Cliente.Descripcion;
                            direccionResPago = objResPago.Cliente.Direccion;
                            try
                            {
                                codigoPostalResPago = objResPago.Cliente.CodigoPostal;
                            }
                            catch { codigoPostalResPago = string.Empty; }
                            telefonoResPago = objResPago.Cliente.Telefono;
                            nifResPago = objResPago.Cliente.Ruc;

                            pRetval = pRetval.Replace("{26}", codigoResPago);
                            pRetval = pRetval.Replace("{42}", nombreResPago);
                            pRetval = pRetval.Replace("{43}", direccionResPago);
                            pRetval = pRetval.Replace("{44}", codigoPostalResPago);
                            pRetval = pRetval.Replace("{45}", telefonoResPago);
                            pRetval = pRetval.Replace("{46}", nifResPago);
                        }
                    }
                    //-- solicitante Z3
                    InterlocutorBE objAgTransporte = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocAgTrans")); });
                    if (objAgTransporte != null)
                    {
                        if (objAgTransporte.Cliente != null)
                        {
                            codigoAgTrans = objAgTransporte.Cliente.Codigo;
                            nombreAgTrans = objAgTransporte.Cliente.Descripcion;
                            direccionAgTrans = objAgTransporte.Cliente.Direccion;
                            if (objAgTransporte.Cliente.CodigoPostal != null)
                            {
                                codigoPostalAgTrans = objAgTransporte.Cliente.CodigoPostal;
                            }
                            telefonoAgTrans = objAgTransporte.Cliente.Telefono;
                            nifAgTrans = objAgTransporte.Cliente.Ruc;

                            pRetval = pRetval.Replace("{96}", codigoAgTrans);
                            pRetval = pRetval.Replace("{97}", nombreAgTrans);
                            pRetval = pRetval.Replace("{98}", direccionAgTrans);
                            pRetval = pRetval.Replace("{99}", codigoPostalAgTrans);
                            pRetval = pRetval.Replace("{100}", telefonoAgTrans);
                            pRetval = pRetval.Replace("{101}", nifAgTrans);
                        }
                    }
                    //-- encargado comercial VE
                    InterlocutorBE objEncargadoComercial = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor1")); });
                    if (objEncargadoComercial != null)
                    {
                        if (objEncargadoComercial.Persona != null)
                        {
                            CodVendedor1 = objEncargadoComercial.Persona.CodPersona;
                            NomVendedor1 = objEncargadoComercial.Persona.Descripcion;

                            pRetval = pRetval.Replace("{102}", CodVendedor1);
                            pRetval = pRetval.Replace("{103}", NomVendedor1);
                        }
                    }
                    //-- Vendedor Web V2
                    InterlocutorBE objVendedorWeb = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor2")); });
                    if (objVendedorWeb != null)
                    {
                        if (objVendedorWeb.Persona != null)
                        {
                            CodVendedorWeb = objVendedorWeb.Persona.CodPersona;
                            NomVendedorWeb = objVendedorWeb.Persona.Descripcion;

                            pRetval = pRetval.Replace("{104}", CodVendedorWeb);
                            pRetval = pRetval.Replace("{105}", NomVendedorWeb);
                        }
                    }
                    //-- Vendedor2 V3
                    InterlocutorBE objVendedor2 = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor3")); });
                    if (objVendedor2 != null)
                    {
                        if (objVendedor2.Persona != null)
                        {

                            Vendedor2 = objVendedor2.Persona.CodPersona;
                            pRetval = pRetval.Replace("{106}", Vendedor2);
                        }
                    }
                    //-- Vendedor3 V4
                    InterlocutorBE objVendedor3 = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor4")); });
                    if (objVendedor3 != null)
                    {
                        if (objVendedor3.Persona != null)
                        {
                            Vendedor3 = objVendedor3.Persona.CodPersona;
                            pRetval = pRetval.Replace("{107}", Vendedor3);
                        }
                    }

                    //-- profesional Z2
                    InterlocutorBE objProfesional = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocProfesional")); });
                    if (objProfesional != null)
                    {
                        if (objProfesional.Persona != null)
                        {
                            CodProfesional = objProfesional.Persona.CodPersona;
                            NomProfesional = objProfesional.Persona.Descripcion;
                            direccionProfesional = objProfesional.Cliente.Direccion;
                            if (objProfesional.Cliente.CodigoPostal != null)
                            {
                                codigoPostalProfesional = objProfesional.Cliente.CodigoPostal;
                            }
                            telefonoProfesional = objProfesional.Cliente.Telefono;

                            pRetval = pRetval.Replace("{108}", CodProfesional);
                            pRetval = pRetval.Replace("{109}", NomProfesional);
                            pRetval = pRetval.Replace("{110}", direccionProfesional);
                            pRetval = pRetval.Replace("{111}", codigoPostalProfesional);
                            pRetval = pRetval.Replace("{112}", telefonoProfesional);
                        }
                    }

                    //-- profesional 2 (Z5)
                    InterlocutorBE objProfesional2 = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocProfesional2")); });
                    if (objProfesional2 != null)
                    {
                        if (objProfesional2.Persona != null)
                        {
                            CodProfesional2 = objProfesional2.Persona.CodPersona;
                            NomProfesional2 = objProfesional2.Persona.Descripcion;
                            direccionProfesional2 = objProfesional2.Cliente.Direccion;
                            if (objProfesional2.Cliente.CodigoPostal != null)
                            {
                                codigoPostalProfesional2 = objProfesional2.Cliente.CodigoPostal;
                            }
                            telefonoProfesional2 = objProfesional2.Cliente.Telefono;

                            pRetval = pRetval.Replace("{113}", CodProfesional2);
                            pRetval = pRetval.Replace("{114}", NomProfesional2);
                            pRetval = pRetval.Replace("{115}", direccionProfesional2);
                            pRetval = pRetval.Replace("{116}", codigoPostalProfesional2);
                            pRetval = pRetval.Replace("{117}", telefonoProfesional2);
                        }
                    }
                }
            }
        }

        private void cargarInfoCliente()
        {
            //cargar data de Organización de Ventas
            if (Session["Cliente"] != null)
            {
                ClienteBE pObjCliente = (ClienteBE)Session["Cliente"];

                List<GenericBE> lstOrgVtas = ClienteBC.Instance.listaOrgVtas(pObjCliente.Codigo);
                //cmbOrgVtas.DataValueField = "Codigo";
                //cmbOrgVtas.DataTextField = "Descripcion";
                //cmbOrgVtas.DataSource = lstOrgVtas;
                //cmbOrgVtas.DataBind();
                Json = JsonConvert.SerializeObject(lstOrgVtas, new IsoDateTimeConverter());
                pRetval = pRetval.Replace("{59}", Json);
                if (lstOrgVtas.Count > 0)
                {
                    lstCanalDist = ClienteBC.Instance.listaCanalDist(pObjCliente.Codigo, lstOrgVtas[0].Codigo);
                    //cmbCanalDist.DataValueField = "Codigo";
                    //cmbCanalDist.DataTextField = "Descripcion";
                    //cmbCanalDist.DataSource = lstCanalDist;
                    //cmbCanalDist.DataBind();
                    Json = JsonConvert.SerializeObject(lstCanalDist, new IsoDateTimeConverter());
                    pRetval = pRetval.Replace("{60}", Json);
                    if (lstCanalDist[0].Codigo.Equals("10"))
                    {
                        try
                        {
                            //cmbCondExp.SelectedValue = ParametroBC.Instance.getParamValue("LprioCanal10");
                            CondExp = ParametroBC.Instance.getParamValue("LprioCanal10");
                            pRetval = pRetval.Replace("{61}", CondExp);
                        }
                        catch { }
                    }
                }
                else
                {
                    //cmbCanalDist.DataValueField = "Codigo";
                    //cmbCanalDist.DataTextField = "Descripcion";
                    //cmbCanalDist.DataSource = new List<GenericBE>();
                    //cmbCanalDist.DataBind();
                    lstCanalDist = new List<GenericBE>();
                    Json = JsonConvert.SerializeObject(lstCanalDist, new IsoDateTimeConverter());
                    pRetval = pRetval.Replace("{60}", Json);
                }

                //cargar cond pago y cond exp
                string pCondPago = "", pCondExp = "";
                //ClienteBC.Instance.infoClienteNac(pObjCliente.Codigo, cmbOrgVtas.SelectedValue, cmbCanalDist.SelectedValue, gvSectorVal, out pCondPago, out pCondExp);
                ClienteBC.Instance.infoClienteNac(pObjCliente.Codigo,
                    lstOrgVtas != null ? lstOrgVtas[0].Codigo : "",
                    lstCanalDist != null ? lstCanalDist[0].Codigo : "",
                    gvSectorVal, out pCondPago, out pCondExp);

                try
                {
                    int i = 0;
                    //for (; i < cmbCondicionesPago.Items.Count - 1; i++)
                    //{
                    //    if (cmbCondicionesPago.Items[i].Value.Equals(pCondPago)) { break; }
                    //}
                    //cmbCondicionesPago.SelectedIndex = i;
                    for (; i < lstCondicionesPago.Count - 1; i++)
                    {
                        if (lstCondicionesPago[i].Codigo.Equals(pCondPago)) { break; }
                    }
                    pCondicionesPago = i.ToString();
                    pRetval = pRetval.Replace("{62}", pCondicionesPago);
                }
                catch //(Exception ex) 
                {
                    //Session["Mensaje"] = "Cond. pago asignada al cliente: " + pCondPago + " no existe.\r\n"; 
                    pRetval = pRetval.Replace("{0}", "false");
                    pRetval = pRetval.Replace("{1}", "Cond. pago asignada al cliente: " + pCondPago + " no existe.\r\n");
                    return;
                }
            }
            else //si no existe el cliente seleccionado:
            {
                //cmbOrgVtas.DataValueField = "Codigo";
                //cmbOrgVtas.DataTextField = "Descripcion";
                //cmbOrgVtas.DataSource = new List<GenericBE>();
                //cmbOrgVtas.DataBind();

                //cmbCanalDist.DataValueField = "Codigo";
                //cmbCanalDist.DataTextField = "Descripcion";
                //cmbCanalDist.DataSource = new List<GenericBE>();
                //cmbCanalDist.DataBind();

                //cmbCondExp.SelectedValue = ParametroBC.Instance.getParamValue("CondExpDefault");
                //cmbCondicionesPago.SelectedValue = "";
                List<GenericBE> lstOrgVtas = new List<GenericBE>();
                Json = JsonConvert.SerializeObject(lstOrgVtas, new IsoDateTimeConverter());
                pRetval = pRetval.Replace("{59}", Json);

                lstCanalDist = new List<GenericBE>();
                Json = JsonConvert.SerializeObject(lstCanalDist, new IsoDateTimeConverter());
                pRetval = pRetval.Replace("{60}", Json);

                CondExp = ParametroBC.Instance.getParamValue("CondExpDefault");
                pRetval = pRetval.Replace("{61}", CondExp);

                pCondicionesPago = "";
                pRetval = pRetval.Replace("{62}", pCondicionesPago);
            }
            //cargar Encargado Comercial
            this.buscarEncargadoComercial();
        }

        private void buscarEncargadoComercial()
        {
            if (Session["Cliente"] != null)
            {
                ClienteBE pObjCliente = (ClienteBE)Session["Cliente"];
                PersonaBE pObjPersona = ClienteBC.Instance.buscaVendedor(pObjCliente.Codigo, pOrgVtas, pCanalDist);
                if (pObjPersona != null)
                {
                    //txtNomVendedor1.Text = pObjPersona.Descripcion;
                    //txtCodVendedor1.Text = pObjPersona.CodPersona;
                    NomVendedor1 = pObjPersona.Descripcion;
                    CodVendedor1 = pObjPersona.CodPersona;
                    pRetval = pRetval.Replace("{54}", CodVendedor1);
                    pRetval = pRetval.Replace("{55}", NomVendedor1);
                }
            }
        }

        private void BuscarDocumento()
        {
            pRetval = "{\"success\":{0}, \"errors\":{\"reason\": \"{1}\"}, \"lstPedidos\":{2} ";
            pRetval += "}";

            PersonaBE objPersona = (PersonaBE)Session["PersonaWeb"];

            pTipoDoc = Request.Params["claseDoc"] != null ? Request.Params["claseDoc"] : "";
            pCanalDist = Request.Params["canalDist"] != null ? Request.Params["canalDist"] : "";
            pOrgVtas = Request.Params["orgVtas"] != null ? Request.Params["orgVtas"] : "";
            pFechaInicio = Request.Params["fechaInicio"] != null ? Request.Params["fechaInicio"] : "";
            pCodigoMaterial = Request.Params["codigoMaterial"] != null ? Request.Params["codigoMaterial"] : "";
            pFechaFin = Request.Params["fechaFin"] != null ? Request.Params["fechaFin"] : "";
            pAuxCod = Request.Params["codAsesor"] != null ? Request.Params["codAsesor"] : "*";
            pnumDoc = Request.Params["numDoc"] != null ? Request.Params["numDoc"] : "";
            prefLegal = Request.Params["refLegal"] != null ? Request.Params["refLegal"] : "";
            pnombreCliente = Request.Params["nombreCliente"] != null ? Request.Params["nombreCliente"] : "";
            pNIF = Request.Params["Nif"] != null ? Request.Params["Nif"] : "";
            pcodCliente = Request.Params["codCliente"] != null ? Request.Params["codCliente"] : "";
            pnombreMaterial = Request.Params["nMaterial"] != null ? Request.Params["nMaterial"] : "";
            pDatoBusqueda = Request.Params["datoBusqueda"] != null ? Request.Params["datoBusqueda"] : "";
            pTipoDato = Request.Params["tipoBusqueda"] != null ? Request.Params["tipoBusqueda"] : "1";

            if (string.IsNullOrEmpty(pFechaInicio))
            {
                pFechaInicio = DateTime.Today.ToString("dd/MM/yyyy");
            }
            if (string.IsNullOrEmpty(pFechaFin))
            {
                pFechaFin = DateTime.Today.ToString("dd/MM/yyyy");
            }

            //if (objPersona != null)
            //{
            if (string.IsNullOrEmpty(pAuxCod))
            {
                CodVendedorWeb = ""; //objPersona.CodPersona; 
            }
            string auxCod = pAuxCod == "*" ? "0" : pAuxCod;

            if (pDatoBusqueda.Trim().Length > 0)
            {
                switch (pTipoDato)
                {
                    case "1":
                        pnumDoc = pDatoBusqueda;
                        break;
                    case "2":
                        prefLegal = pDatoBusqueda;
                        break;
                    case "3":
                        pnombreCliente = pDatoBusqueda;
                        break;
                    case "4":
                        pNIF = pDatoBusqueda;
                        break;
                    case "5":
                        pcodCliente = pDatoBusqueda;
                        break;
                    case "6":
                        pnombreMaterial = pDatoBusqueda;
                        break;
                }
            }

            _lstPedidos = PedidoBC.Instance.listaPedidos(pnumDoc, pAuxCod,
                        Convert.ToDateTime(pFechaInicio), Convert.ToDateTime(pFechaFin),
                        pOrgVtas, pCanalDist, "", prefLegal, pCodigoMaterial, pnombreCliente, pNIF,
                        pnombreMaterial, pcodCliente);

            Json = JsonConvert.SerializeObject(_lstPedidos, new IsoDateTimeConverter());
            pRetval = pRetval.Replace("{0}", "true");
            pRetval = pRetval.Replace("{1}", "");
            pRetval = pRetval.Replace("{2}", Json);

            Response.ContentType = "application/json; charset=UTF-8";
            Response.Write(pRetval);
            //}
        }

        private void DetalleDocumentoAcciones(string _numPedido, string _accion)
        {
            if (pNumPedido != "")
            {
                if (_accion == "Editar")
                {
                    //string op = Convert.ToString(Session["Operacion"]);
                    PedidoBE objPedido = PedidoBC.Instance.leer(_numPedido);
                    if (objPedido != null)
                    {
                        if (objPedido.Tratado)
                        {
                            Session["PedidoTratado"] = true;
                            pedidoTratado = "true";
                        }
                        Session["Operacion"] = "editar";
                        Session["Cliente"] = ClienteBC.Instance.leer(objPedido.CodCliente);
                        Session["Pedido"] = objPedido;
                        Response.Redirect("DocVenta.aspx");
                    }
                }
                else if (_accion == "Flujo")
                {
                    if (_numPedido.Equals(string.Empty) || _numPedido.Equals("0000000000"))
                    {
                        Session["Mensaje"] = "Número de documento inválido.";
                        //
                    }
                    else
                    {
                        string cadena_padre;
                        List<SeguimientoBE> lstSeguimiento = PedidoBC.Instance.buscaDocumentos(_numPedido);
                        StatusBE objStatus = PedidoBC.Instance.verStatus(_numPedido);

                        if (lstSeguimiento.Count > 0 || objStatus != null)
                        {
                            DataTable dt = Converter<SeguimientoBE>.Convert(lstSeguimiento);

                            dt.Columns.Add("Hijos", typeof(string));
                            string cod;

                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                cadena_padre = "";
                                cod = Convert.ToString(dt.Rows[i]["Jerarquia"]);
                                int longitud = cod.Length - 2;
                                for (int j = 0; j < longitud; j++)
                                {
                                    cadena_padre = cadena_padre + cod[j];
                                }
                                dt.Rows[i]["Hijos"] = cadena_padre;
                            }
                            //serializar el DT y luego las variables de status
                            //----
                            _bloqueo = objStatus.Bloqueo;
                            _credito = objStatus.Credito;
                            _entrega = objStatus.Entrega;
                            _global = objStatus.Global;
                            _rechazo = objStatus.Rechazo;
                        }
                        else
                        {
                            //string mensaje = "No se encontró información para el doc. de ventas especificado.";
                        }
                    }
                }
                else if (_accion == "Detalle")
                {
                    PedidoBE objPedido = PedidoBC.Instance.leer(pNumPedido);
                    GenericBE objTmp = null;
                    List<GenericBE> lstMotivRec = null;

                    foreach (DetalleBE itm in objPedido.Detalle)
                    {
                        if (!string.IsNullOrEmpty(itm.MotivoRechazo))
                        {
                            if (lstMotivRec == null)
                            {
                                lstMotivRec = PedidoBC.Instance.listarMotivosRechazo();
                            }
                            objTmp = lstMotivRec.Find(X => X.Codigo == itm.MotivoRechazo);
                            itm.MotivoRechazo = objTmp != null ? (objTmp.Codigo + "-" + objTmp.Descripcion).Trim() : itm.MotivoRechazo;
                        }
                    }
                    //serializar objPedido.Detalle
                }
            }
        }

        private PedidoBE BuscarPrecios(PedidoBE _objPed)
        {
            PedidoBE _lvObjPedido = _objPed;
            // valida q hayan datos necesarios
            if (!gvGrpVendVal.Equals(string.Empty) && int.Parse(_objPed.CodOficina) >= 0 &&
                !_objPed.CodTipoDoc.Trim().Equals("") && int.Parse(_objPed.OrgVentas) >= 0 &&
                int.Parse(_objPed.CanalDist) >= 0 && !_objPed.CodCliente.Trim().Equals(""))
            {
                PedidoBC objPBC = PedidoBC.Instance;
                string retMsg = objPBC.cargarCondiciones(ref _lvObjPedido);

                if (retMsg != string.Empty)
                {
                    
                }
                else
                {

                }
            }

            return _lvObjPedido;
        }

        private List<CondicionBE> ObtenerCondicionesDescuentos(PedidoBE oPed, DetalleBE oPedDet)
        {
            oPed.Sector = "00";
            string _lote = "";
            if (_lvLstLotes.Count > 0 && oPedDet.CodLote == "")
            {
                _lote = _lvLstLotes[0].Codigo;
            }
            else if (oPedDet.CodLote != "")
            {
                _lote = oPedDet.CodLote;
            }
            else
            {
                _lote = "";
            }

            oPedDet.CodLote = _lote;

            string retVal;
            List<CondicionBE> lstDctos = CondicionBC.Instance.ObtenerCondiciones(oPed, oPedDet, out retVal);

            if (lstDctos.Count > 0)
            {
                foreach (CondicionBE item in lstDctos)
                {

                    if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoDecorPorc"))
                    {
                        item.Importe = oPedDet.DctoDecorPorc.Importe;
                        item.Valor = oPedDet.DctoDecorPorc.Valor;
                        oPedDet.DctoDecorPorc.Denominacion = item.Denominacion;
                        oPedDet.DctoDecorPorc.esPorcentaje = true;
                        oPedDet.DctoDecorPorc.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoAdicionalPorc"))
                    {
                        item.Importe = oPedDet.DctoAdicionalPorc.Importe;
                        item.Valor = oPedDet.DctoAdicionalPorc.Valor;
                        oPedDet.DctoAdicionalPorc.Denominacion = item.Denominacion;
                        oPedDet.DctoAdicionalPorc.esPorcentaje = true;
                        oPedDet.DctoAdicionalPorc.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoEstadisticoPorc"))
                    {
                        item.Importe = oPedDet.DctoEstadisticoPorc.Importe;
                        item.Valor = oPedDet.DctoEstadisticoPorc.Valor;
                        oPedDet.DctoEstadisticoPorc.Denominacion = item.Denominacion;
                        oPedDet.DctoEstadisticoPorc.esPorcentaje = true;
                        oPedDet.DctoEstadisticoPorc.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoGerenciaPorc"))
                    {
                        item.Importe = oPedDet.DctoGerenciaPorc.Importe;
                        item.Valor = oPedDet.DctoGerenciaPorc.Valor;
                        oPedDet.DctoGerenciaPorc.Denominacion = item.Denominacion;
                        oPedDet.DctoGerenciaPorc.esPorcentaje = true;
                        oPedDet.DctoGerenciaPorc.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoGerenciaMonto"))
                    {
                        item.Importe = oPedDet.DctoGerenciaMonto.Importe;
                        item.Valor = oPedDet.DctoGerenciaMonto.Valor;
                        oPedDet.DctoGerenciaMonto.Denominacion = item.Denominacion;
                        oPedDet.DctoGerenciaMonto.esPorcentaje = true;
                        oPedDet.DctoGerenciaMonto.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondZD06"))
                    {
                        item.Importe = oPedDet.DctoZD06.Importe;
                        item.Valor = oPedDet.DctoZD06.Valor;
                        oPedDet.DctoZD06.Denominacion = item.Denominacion;
                        oPedDet.DctoZD06.esPorcentaje = true;
                        oPedDet.DctoZD06.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctos")) //ZD09
                    {
                        item.Importe = oPedDet.DctoGenerico.Importe;
                        item.Valor = oPedDet.DctoGenerico.Valor;
                        oPedDet.DctoGenerico.Denominacion = item.Denominacion;
                        oPedDet.DctoGenerico.esPorcentaje = true;
                        oPedDet.DctoGenerico.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondZD11"))
                    {
                        item.Importe = oPedDet.DctoZD11.Importe;
                        item.Valor = oPedDet.DctoZD11.Valor;
                        oPedDet.DctoZD11.Denominacion = item.Denominacion;
                        oPedDet.DctoZD11.esPorcentaje = true;
                        oPedDet.DctoZD11.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctosAdicional"))
                    {
                        item.Importe = oPedDet.DsctoAdicionalZD12.Importe;
                        item.Valor = oPedDet.DsctoAdicionalZD12.Valor;
                        oPedDet.DsctoAdicionalZD12.Denominacion = item.Denominacion;
                        oPedDet.DsctoAdicionalZD12.esPorcentaje = true;
                        oPedDet.DsctoAdicionalZD12.LimiteInferior = item.LimiteInferior;
                        //le asignamos al descuento cabecera
                        oPed.dsctoAdicionalZD12 = Math.Abs(oPedDet.DsctoAdicionalZD12.Importe);
                        oPed.dsctoAdicionalZD12tmp = oPedDet.DsctoAdicionalZD12.Importe;
                    }
                }
            }
            return lstDctos;
        }

        private string GenerarServicio(out string _pNumPed)
        {
            string mens = ""; string pNumPedido = "";
            try
            {
                string pedidoVenta1 = Request.Params["venta1"] != null ? Request.Params["venta1"] : "";
                string pedidoVenta2 = Request.Params["venta2"] != null ? Request.Params["venta2"] : "";
                string pedidoVenta3 = Request.Params["venta3"] != null ? Request.Params["venta3"] : "";
                string pedidoVenta4 = Request.Params["venta4"] != null ? Request.Params["venta4"] : "";

                string pedidoVisita1 = Request.Params["visita1"] != null ? Request.Params["visita1"] : "";
                string pedidoVisita2 = Request.Params["visita2"] != null ? Request.Params["visita2"] : "";
                string pedidoVisita3 = Request.Params["visita3"] != null ? Request.Params["visita3"] : "";
                string pedidoVisita4 = Request.Params["visita4"] != null ? Request.Params["visita4"] : "";

                List<string> lst_ventas = new List<string>();
                List<string> lst_visitas = new List<string>();

                if (!pedidoVenta1.Equals(""))
                    lst_ventas.Add(pedidoVenta1.Trim().ToString().PadLeft(10, '0'));

                if (!pedidoVenta2.Equals(""))
                    lst_ventas.Add(pedidoVenta2.Trim().ToString().PadLeft(10, '0'));

                if (!pedidoVenta3.Equals(""))
                    lst_ventas.Add(pedidoVenta3.Trim().ToString().PadLeft(10, '0'));

                if (!pedidoVenta4.Equals(""))
                    lst_ventas.Add(pedidoVenta4.Trim().ToString().PadLeft(10, '0'));


                if (!pedidoVisita1.Equals(""))
                    lst_visitas.Add(pedidoVisita1.Trim().ToString().PadLeft(10, '0'));

                if (!pedidoVisita2.Equals(""))
                    lst_visitas.Add(pedidoVisita2.Trim().ToString().PadLeft(10, '0'));

                if (!pedidoVisita3.Equals(""))
                    lst_visitas.Add(pedidoVisita3.Trim().ToString().PadLeft(10, '0'));

                if (!pedidoVisita4.Equals(""))
                    lst_visitas.Add(pedidoVisita4.Trim().ToString().PadLeft(10, '0'));

                
                mens = PedidoBC.Instance.generarServicio(out pNumPedido, lst_ventas, lst_visitas);
                //Session["Mensaje"] = pRetVal;
                //txtNumPedido.Text = pNumPedido.Trim();
                //muestro el pedido generado
                if (!pNumPedido.Trim().Equals(""))
                {
                    ////cargar info del pedido para editarla.
                    //this.CargarPedido(pNumPedido, "editar");
                    ////this._lvObjPedido = (PedidoBE)Session["Pedido"];
                    //foreach (DetalleBE d in objPedido.Detalle)
                    //{
                    //    d.DctoDecorPorc.ImporteAnterior = d.DctoDecorPorc.Importe;
                    //}
                }
                
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {

            }
            _pNumPed = pNumPedido;
            return mens;
        }

        private void PlanFacturacion(string pNumPedido)
        {
            List<PlanFactBE> planFact = null;
            List<CatFactBE> CatFactBE;

            pNumPedido = pNumPedido.PadLeft(10, '0');
            CatFactBE = new List<CatFactBE>();
            planFact = PedidoBC.Instance.getPlanFact(pNumPedido, out CatFactBE);
            //addItemPF(planFact);
            if (planFact != null)
            {
                Json = JsonConvert.SerializeObject(planFact);
                pRetval = pRetval.Replace("{118}", Json);
                //if (CatFactBE != null)
                //{
                //    Json = JsonConvert.SerializeObject(CatFactBE);
                //    pRetval = pRetval.Replace("{3}", Json);
                //}
                //else
                //{
                //    pRetval = pRetval.Replace("{3}", "null");
                //}
            }
            else
            {
                Json = JsonConvert.SerializeObject(planFact);
                pRetval = pRetval.Replace("{118}", "null");
            }
        }

        private void addItemPF(List<PlanFactBE> _planFact)
        {
            List<PlanFactBE> planFact = null;
            planFact = _planFact;
            decimal porcentaje = 0;
            bool add = true;
            foreach (PlanFactBE pf in planFact)
            {
                porcentaje += decimal.Round(pf.FPROZ / 100, 3);
                add = planFact[planFact.Count - 1].FKDAT.Year.Equals(1) ? false : true;
            }
            if (porcentaje < 1 && add)
            {
                if (planFact == null)
                {
                    planFact = new List<PlanFactBE>();
                }
                PlanFactBE planFactBE = new PlanFactBE();

                if (planFact.Count == 0)
                {
                    planFactBE.FKDAT = DateTime.Now;
                    planFactBE.FPROZ = 0;
                    planFactBE.FAKWR = planFactBE.FPROZ * objPedido.SubTotal;
                }
                else
                {
                    planFactBE.FPROZ = (1 - porcentaje) * 100;
                    planFactBE.FAKWR = (1 - porcentaje) * objPedido.SubTotal;
                }
                planFactBE.TAXK1 = "I";

                if (planFact.Count > 0)
                    planFactBE.FPLTR = (int.Parse(planFact[planFact.Count - 1].FPLTR) + 1).ToString().PadLeft(6, '0');
                else
                    planFactBE.FPLTR = "000001";

                planFact.Add(planFactBE);
            }
        }

        private void cargarLotesAMaterial(PedidoBE objPedido)
        {
            //recoremos los detalles del pedido para asiganr el lote
            foreach (DetalleBE objItem in objPedido.Detalle)
            {
                if (!string.IsNullOrEmpty(objItem.TipoPosAnt) && (!op.Equals("copiar")))
                {
                    if (!objItem.TipoPosAnt.ToUpper().Equals(objItem.TipoPosicion.ToUpper().Trim()))
                    {
                        objItem.Repartos.Clear();
                        objItem.TipoPosAnt = objItem.TipoPosicion.ToUpper().Trim();
                    }
                }
                string numPedidoModif = string.Empty;
                string numPosModif = string.Empty;
                if (op.ToLower().Equals("editar") || op.ToLower().Equals("ver"))
                {
                    numPedidoModif = this.objPedido.NumPedido;
                    numPosModif = objItem.Posicion;
                }

                this._lvLstCentros = new List<GenericBE>();
                this._lvLstAlmacenes = new List<GenericBE>();
                this._lvLstLotes = new List<GenericBE>();

                decimal pCantTot = objPedido.Detalle.Where(X => (Int16.Parse(X.Posicion) < Int16.Parse(objItem.Posicion))
                   && (X.CodMaterial == objItem.CodMaterial)
                   && (X.CodAlmacen == objItem.CodAlmacen)
                   && (X.CodCentro == objItem.CodCentro)
                   && (X.CodLote == objItem.CodLote)).Sum(Y => Y.Cantidad);
                pCantTot += objItem.Cantidad;

                this._lvLstCAL = ParametroBC.Instance.getDataLotes(objItem.Material.CodMaterial, pCantTot, string.Empty,
                            string.Empty, string.Empty, numPedidoModif, numPosModif, objPedido.OrgVentas, objPedido.CanalDist);
                _lvCALSessKey = _lvPreCALSessKey + objItem.PosicionCorto;
                //-- distribuir en lstCentro, lstAlmacen, lstLotes
                this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                string codcentro = objItem.CodCentro;
                try
                {
                    
                    if (this._lvLstCentros.Count > 0)
                    {
                        if (objPedido.OrgVentas == "1000")
                        {
                            objItem.CodCentro = "9110";
                        }
                        else if (objPedido.OrgVentas == "2000")
                        {
                            objItem.CodCentro = "2010";
                        }
                        if (objPedido.CodOficina == "1060")
                        {
                            objItem.CodCentro = "1060";
                        }
                    }
                }
                catch { }
                //si ya había un centro seleccionado, lo mantiene seleccionado
                try
                {
                    if (objItem != null && objItem.CodCentro != null)
                    {
                        if (codcentro.Trim() != "")
                        {
                            objItem.CodCentro = codcentro;
                        }
                    }
                    else
                    {
                        //-- distribuir en lstCentro, lstAlmacen, lstLotes
                        this.DistribuirCAL(objItem.CodCentro, string.Empty, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                        //-- Fin Cambio 08.04.2011
                    }
                }
                catch { }

                //buscar almacenes según el material y centro seleccionado
                string codalmacen = objItem.CodAlmacen;
                try
                {
                    if (this._lvLstAlmacenes.Count > 0) 
                    {
                        objItem.CodAlmacen = "0001"; 
                    }
                }
                catch { }
                //si había un almacen seleccionado, se mantiene seleccionado
                try
                {
                    if (objItem != null && objItem.CodAlmacen != null)
                    {
                        if (codalmacen.Trim() != "")
                        {
                            objItem.CodAlmacen = codalmacen;
                        }            
                    }
                    else
                    {
                        //-- distribuir en lstCentro, lstAlmacen, lstLotes
                        this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                        //-- Fin Cambio 08.04.2011
                    }
                }
                catch { }

                decimal dCantidad = 0m;
                try { 
                    dCantidad = Convert.ToDecimal(objItem.Cantidad); 
                }
                catch { }
                string pCodLoteOptimo = "";
                //--- si no es tipo de doc sin lote, no trae la lista de lotes disponibles
                if (!ParametroBC.Instance.esTipoSinLote(objPedido.CodTipoDoc))
                {
                    objItem.CodAlmacen = objItem.CodAlmacen;
                    objItem.Cantidad = dCantidad;
                }
                //adicionando un item vacio a los lotes
                string codlote = objItem.CodLote;
                GenericBE objVacio = new GenericBE(); objVacio.Codigo = ""; objVacio.Descripcion = "- ninguno -";
                this._lvLstLotes.Add(objVacio);
                try
                {
                    if (!ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                    {
                        objItem.CodLote = _lvLstLotes[0].Codigo;//lote óptimo siempre en primera posición
                    }
                }
                catch { }
                //selecciono lote que venía seleccionado
                try
                {
                    if (objItem != null && !string.IsNullOrEmpty(objItem.CodLote))
                    {
                        if (codlote.Trim() != "")
                        {
                            objItem.CodLote = codlote;
                        }                        
                    }
                }
                catch { }
                //--- salida de validación tipo posición...
                //-- Cambiar TipoPosición según tipo de material NA1, NA2, NA3 :: Requerimiento 06.04.2011
                //Falta añadir condición para que haga esta validación
                if (ParametroBC.Instance.esTipoX(objPedido.CodTipoDoc, "docValiZ"))
                {
                    if (objItem != null)
                    {
                        if (objItem.Material == null)
                        {
                            objItem.Material = MaterialBC.Instance.leerMaterial(objItem.CodMaterial, objPedido.OrgVentas, objPedido.CanalDist);
                        }
                        if (!ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoCabCombo") && !ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoPosCombo"))
                        {
                            if (objPedido.OrgVentas == "1000" && (objPedido.CodTipoDoc == "Z001" || objPedido.CodTipoDoc == "Z003")) //nueva logica solo para DECOR CENTER y estas 2 clases de documento
                            {
                                if (objItem.Material.TipoMaterial == "NA2" || objItem.Material.TipoMaterial == "NA3")
                                {
                                    //comentado a peticion de tomás (llamó roberto) 26.07.2012 @@@@
                                    //if (_lvLstLotes.Count > 1)
                                    //{
                                    //    objItem.TipoPosicion = "Z010";
                                    //}
                                    //else
                                    //{
                                    //    objItem.TipoPosicion = "ZE10";
                                    //}
                                }
                                else if (objItem.Material.TipoMaterial == "NA" || objItem.Material.TipoMaterial == "NA1" || objItem.Material.TipoMaterial == "IM" || objItem.Material.TipoMaterial == "IM1")
                                {
                                    //objItem.TipoPosicion = "Z010";
                                }
                            }
                            else
                            {
                                //-- Si es NA2
                                if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA2"))
                                {
                                    //comentado a peticion de tomás (llamó roberto) 26.07.2012 @@@@
                                    //if (this._lvLstLotes.Count <= 1) // Si solo hay un lote, no hay stock (es el item que dice "ninguno")
                                    //{
                                    //    objItem.TipoPosicion = "ZE10";
                                    //}
                                    //else if (this._lvLstLotes.Count > 1)// && objItem.TipoPosicion == "ZE10")
                                    //{
                                    //    objItem.TipoPosicion = "Z010";
                                    //}
                                }
                                else if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA3")) //-- NA3 siempre con ZE10 - Con o Sin Stock
                                {
                                    if (!objItem.TipoPosicion.Equals("Z010"))
                                    {
                                        //objItem.TipoPosicion = "ZE10";
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        /// <summary>
        /// nuevo método para distribuir StockBE en CAL
        /// </summary>
        /// <param name="selCentro">Centro seleccionado</param>
        /// <param name="selAlm">Alm seleccionado</param>
        /// <param name="list">lista stockbe</param>
        /// <param name="lstCentro">ref lista centro</param>
        /// <param name="lstAlmacen">ref lista alm</param>
        /// <param name="lstLote">ref lista lot</param>
        private void DistribuirCAL(string selCentro, string selAlm, List<StockBE> list, ref List<GenericBE> lstCentro, ref List<GenericBE> lstAlmacen, ref List<GenericBE> lstLote)
        {
            lstCentro.Clear(); lstAlmacen.Clear(); lstLote.Clear();
            string charSep = ParametroBC.Instance.getParamValue("charSep");
            GenericBE objItem, objAux;
            List<StockBE> lstAux;

            //Añadir todos los centros
            if (pTipoDoc == "Z034")
            {
                objAux = null;
                objAux = new GenericBE();
                objAux.Codigo = "9110";
                objAux.Descripcion = "9110: Distribución";
                lstCentro.Add(objAux);            
            }
            else
            {
                foreach (StockBE obj in list)
                {
                    objAux = null;
                    objAux = lstCentro.Find(X => X.Codigo == obj.CodCentro);
                    if (objAux == null)
                    {
                        objAux = new GenericBE();
                        objAux.Codigo = obj.CodCentro;
                        objAux.Descripcion = obj.CodCentro + charSep + obj.DescCentro;
                        lstCentro.Add(objAux);
                    }
                }
            }
            if (string.IsNullOrEmpty(selCentro) && lstCentro.Count > 0)
            {
                selCentro = lstCentro[0].Codigo;
            }
            //Añadir almacenes para el centro
            if (pTipoDoc == "Z034")
            {
                objAux = null;
                objAux = new GenericBE();
                objAux.Codigo = "0001";
                objAux.Descripcion = "0001 (Tienda)"; //obj.CodAlmacen + charSep + obj.DescAlmacen;
                lstAlmacen.Add(objAux);
            }
            else
            {
                lstAux = list.FindAll(X => X.CodCentro == selCentro);
                foreach (StockBE obj in lstAux)
                {
                    objAux = null;
                    objAux = lstAlmacen.Find(X => X.Codigo == obj.CodAlmacen);
                    if (objAux == null)
                    {
                        objAux = new GenericBE();
                        objAux.Codigo = obj.CodAlmacen;
                        objAux.Descripcion = obj.DescAlmacen; //obj.CodAlmacen + charSep + obj.DescAlmacen;
                        lstAlmacen.Add(objAux);
                    }
                }
            }
            if (string.IsNullOrEmpty(selAlm) && lstAlmacen.Count > 0)
            {
                selAlm = lstAlmacen[0].Codigo;
            }
            //Añadir lotes para el centro/almacen
            //rgutierrez 29.12.2011
            lstAux = list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty) && !ParametroBC.Instance.esTipoX(X.ValorCaracteristica, "LoteComercial"));
            //lstAux = list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty));

            //ordenar de menor a mayor para dejar el lote óptimo en la primera posición
            lstAux.Sort(delegate(StockBE p1, StockBE p2) { return p1.StockDisponible.CompareTo(p2.StockDisponible); });

            lstAux.AddRange(list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty) && ParametroBC.Instance.esTipoX(X.ValorCaracteristica, "LoteComercial")));

            foreach (StockBE obj in lstAux)
            {
                objAux = new GenericBE();
                objAux.Codigo = obj.CodLote;
                objAux.Descripcion = obj.CodLote + charSep + "Stk = " + string.Format("{0:0,0.0}", obj.StockDisponible);

                lstLote.Add(objAux);
            }
        }

        private void CargaClienteReniec(ClienteBE objCli, ClienteBE cliente)
        {
            //ClienteBE objCliente = ClienteBC.Instance.leer(cliente.Codigo);
            ClienteBE objClienteR = null;
            //solo para clientes eventuales
            if (cliente != null && objCli.Eventual)
            {
                mensajeExcepcion = "";
                objClienteR = ClienteBC.Instance.busquedaClienteReniec(cliente.Ruc, cliente.NOMBRE,cliente.APPAT, cliente.APMAT, out mensajeExcepcion);
                if (mensajeExcepcion == "")
                {
                    if (objClienteR != null && objClienteR.CODIG != null)
                    {

                        Json = JsonConvert.SerializeObject(objClienteR, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include });
                        pRetval = pRetval.Replace("{119}", "[" + Json + "]");

                        List<ClienteBE> listCliPregRes = ClienteBC.Instance.busquedaClientePregRep(objClienteR.CODIG);
                        if (listCliPregRes.Count > 0)
                        {
                            Json = JsonConvert.SerializeObject(listCliPregRes, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include });
                            pRetval = pRetval.Replace("{120}", Json);
                        }
                        else
                        {
                            pRetval = pRetval.Replace("{120}", "[]");
                        }
                    }
                    else
                    {
                        pRetval = pRetval.Replace("{119}", "[]");
                    }  
                }
                else
                {
                    pRetval = pRetval.Replace("{119}", "[]");
                    EnviaErrores(mensajeExcepcion);
                }
                
            }
            else
            {
                pRetval = pRetval.Replace("{119}", "[]");
                pRetval = pRetval.Replace("{120}", "[]");
            }
        }

        private void cargarStockAMaterial(PedidoBE objPedido)
        {
            //recoremos los detalles del pedido para asiganr el lote
            foreach (DetalleBE objItem in objPedido.Detalle)
            {
                if (!string.IsNullOrEmpty(objItem.TipoPosAnt) && (!op.Equals("copiar")))
                {
                    if (!objItem.TipoPosAnt.ToUpper().Equals(objItem.TipoPosicion.ToUpper().Trim()))
                    {
                        objItem.Repartos.Clear();
                        objItem.TipoPosAnt = objItem.TipoPosicion.ToUpper().Trim();
                    }
                }
                string numPedidoModif = string.Empty;
                string numPosModif = string.Empty;
                if (op.ToLower().Equals("editar") || op.ToLower().Equals("ver"))
                {
                    numPedidoModif = this.objPedido.NumPedido;
                    numPosModif = objItem.Posicion;
                }

                this._lvLstCentros = new List<GenericBE>();
                this._lvLstAlmacenes = new List<GenericBE>();
                this._lvLstLotes = new List<GenericBE>();

                decimal pCantTot = objPedido.Detalle.Where(X => (Int16.Parse(X.Posicion) < Int16.Parse(objItem.Posicion))
                   && (X.CodMaterial == objItem.CodMaterial)
                   && (X.CodAlmacen == objItem.CodAlmacen)
                   && (X.CodCentro == objItem.CodCentro)
                   && (X.CodLote == objItem.CodLote)).Sum(Y => Y.Cantidad);
                pCantTot += objItem.Cantidad;

                this._lvLstCAL = ParametroBC.Instance.getDataLotes(objItem.Material.CodMaterial, pCantTot, string.Empty,
                            string.Empty, string.Empty, numPedidoModif, numPosModif, objPedido.OrgVentas, objPedido.CanalDist);
                _lvCALSessKey = _lvPreCALSessKey + objItem.PosicionCorto;
                //-- distribuir en lstCentro, lstAlmacen, lstLotes
                this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                string codcentro = objItem.CodCentro;
                try
                {

                    if (this._lvLstCentros.Count > 0)
                    {
                        if (objPedido.OrgVentas == "1000")
                        {
                            objItem.CodCentro = "9110";
                        }
                        else if (objPedido.OrgVentas == "2000")
                        {
                            objItem.CodCentro = "2010";
                        }
                        if (objPedido.CodOficina == "1060")
                        {
                            objItem.CodCentro = "1060";
                        }
                    }
                }
                catch { }
                //si ya había un centro seleccionado, lo mantiene seleccionado
                try
                {
                    if (objItem != null && objItem.CodCentro != null)
                    {
                        if (codcentro.Trim() != "")
                        {
                            objItem.CodCentro = codcentro;
                        }
                    }
                    else
                    {
                        //-- distribuir en lstCentro, lstAlmacen, lstLotes
                        this.DistribuirCAL(objItem.CodCentro, string.Empty, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                        //-- Fin Cambio 08.04.2011
                    }
                }
                catch { }

                //buscar almacenes según el material y centro seleccionado
                string codalmacen = objItem.CodAlmacen;
                try
                {
                    if (this._lvLstAlmacenes.Count > 0)
                    {
                        objItem.CodAlmacen = "0001";
                    }
                }
                catch { }
                //si había un almacen seleccionado, se mantiene seleccionado
                try
                {
                    if (objItem != null && objItem.CodAlmacen != null)
                    {
                        if (codalmacen.Trim() != "")
                        {
                            objItem.CodAlmacen = codalmacen;
                        }
                    }
                    else
                    {
                        //-- distribuir en lstCentro, lstAlmacen, lstLotes
                        this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                        //-- Fin Cambio 08.04.2011
                    }
                }
                catch { }

                decimal dCantidad = 0m;
                try
                {
                    dCantidad = Convert.ToDecimal(objItem.Cantidad);
                }
                catch { }
                //--- si no es tipo de doc sin lote, no trae la lista de lotes disponibles
                if (!ParametroBC.Instance.esTipoSinLote(objPedido.CodTipoDoc))
                {
                    objItem.CodAlmacen = objItem.CodAlmacen;
                    objItem.Cantidad = dCantidad;
                }
                //adicionando un item vacio a los lotes
                string codlote = objItem.CodLote;
                GenericBE objVacio = new GenericBE(); objVacio.Codigo = ""; objVacio.Descripcion = "- ninguno -";
                this._lvLstLotes.Add(objVacio);
                try
                {
                    if (!ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                    {
                        objItem.CodLote = _lvLstLotes[0].Codigo;//lote óptimo siempre en primera posición
                    }
                }
                catch { }
                //selecciono lote que venía seleccionado
                try
                {
                    if (objItem != null && !string.IsNullOrEmpty(objItem.CodLote))
                    {
                        if (codlote.Trim() != "")
                        {
                            objItem.CodLote = codlote;
                        }
                    }
                }
                catch { }

               objItem.StockPos =  _lvLstCAL.Find(x => x.CodAlmacen == objItem.CodAlmacen && x.CodCentro == objItem.CodCentro
                                && x.CodLote == objItem.CodLote).StockDisponible.ToString();
            }
        }
    }
}

internal static class Converter<T> where T : new()
{
    public static DataTable Convert(List<T> items)
    {
        DataTable returnValue = new DataTable();
        Type itemsType = typeof(T);
        // Recorremos las propiedades para crear las columnas del datatable
        foreach (PropertyInfo prop in itemsType.GetProperties())
        {
            // Crearmos y agregamos una columna por cada propiedad de la entidad
            DataColumn column = new DataColumn(prop.Name);
            column.DataType = prop.PropertyType;
            returnValue.Columns.Add(column);
        }
        int j;
        // ahora recorremos la colección para guardar los datos
        // en el DataTable
        foreach (T item in items)
        {
            j = 0;
            object[] newRow = new object[returnValue.Columns.Count];
            // Volvemos a recorrer las propiedades de cada item para
            // obtener su valor guardarlo en la fila de la tabla
            foreach (PropertyInfo prop in itemsType.GetProperties())
            {
                newRow[j] = prop.GetValue(item, null);
                j++;
            }
            returnValue.Rows.Add(newRow);
        }
        // Devolver el objeto creado
        return returnValue;
    }
}
